❇️ بررسی قابلیت Endpoint Routing
🔸 مکانیزم مسیریابی به این صورته که ما Route هامون رو توی میدلور MVC توسط متد UseMvc تعریف میکنیم
و زمانی که یه Request به میدلور MVC میرسه، این میدلور بر اساس اطلاعات Url و Route های تعریف شده، اولین Route ایی که همخوانی داشته باشه رو انتخاب میکنه و مقادیر مسیر یابی (RouteValues) رو استخراج میکنه و بدین ترتیب میفهمه که کدوم Controller و Action رو باید فراخوانی کنه
🔹 توی Pipeline چون میدلور ها به صورت ترتیبی اجرا میشن تا زمانی که درخواست ما به میدلور MVC نرسه ما نمیتونیم از RouteValues استفاده کنیم
مشکل جایی پیش میاد که مثلا نیاز داریم واسه وبسایت های چند زبانه که بر اساس Url کار میکنند (مثلا fa/home/index) ما نیاز داریم قبل از رسیدن به میدلور MVC، زبان جاری (همون fa) رو توسط سیستم مسیریابی بخونیم و Culture برنامه رو تغییر بدیم ولی تا زمانی که به میدلور MVC نرسیم این کار امکان پذیر نیست
🔸 یک مثال دیگر آن استفاده از خاصیت EnableCorsAttribute (است که بر خلاف app.UseCors که مکانیزم CORS را به صورت سراسری اعمال میکند) میتوان آن را بر روی یک Action خاص اعمال کرد
از آنجایی که در مکانیزم مسیریابی قبلی، سیستم Routing بسیار وابسته به MVC است ما نمی تونیم قبل از رسیدن به میدلور MVC جلوی درخواست های غیر مجاز رو بگیریم، چرا که به Routing درسترسی نداریم و نمیدونیم کدوم Controller و Action قراره فراخوانی بشه
🔹 توی مکانیزم Endpoint Routing اما، وقتی یه درخواست میاد، همون ابتدا مشخص میشه که به کدوم Route مپ شده درنتیجه بقیه میدلور های قبل از میدلور MVC هم میتونن از سیستم Routing استفاده کرده و اطلاعات داخل Url رو درک کنن
🔸 این قابلیت در ASP Core 2.2 اوایل با نام Dispatcher معرفی شد که بعدا به Endpoint Routing تغییر نام پیدا کرد و به صورت پیشفرض توسط SetCompatibilityVersion ورژن Version_2_2 به بالا فعال میشه
🔹 برای استفاده از Endpoint Routing باید میدلور UseEndpointRouting رو اضافه کنید. کار این midlleware تشخیص Endpoint مورد نظر براساس Url درخواستی و Route های تعریف شده است و پس از آن شما میتوانید از مقادیر مسیریابی (RouteValues) استفاده کنید (حتی قبل از رسیدن به محل تعریف Route ها)
نحوه استفاده از این قابلیت در ASPNET Core 2.2 به صورت زیر است
لینک مقاله در دات نت تیپس:
https://www.dotnettips.info/post/3031
_______________
@IranAspMvc
🔸 مکانیزم مسیریابی به این صورته که ما Route هامون رو توی میدلور MVC توسط متد UseMvc تعریف میکنیم
و زمانی که یه Request به میدلور MVC میرسه، این میدلور بر اساس اطلاعات Url و Route های تعریف شده، اولین Route ایی که همخوانی داشته باشه رو انتخاب میکنه و مقادیر مسیر یابی (RouteValues) رو استخراج میکنه و بدین ترتیب میفهمه که کدوم Controller و Action رو باید فراخوانی کنه
🔹 توی Pipeline چون میدلور ها به صورت ترتیبی اجرا میشن تا زمانی که درخواست ما به میدلور MVC نرسه ما نمیتونیم از RouteValues استفاده کنیم
مشکل جایی پیش میاد که مثلا نیاز داریم واسه وبسایت های چند زبانه که بر اساس Url کار میکنند (مثلا fa/home/index) ما نیاز داریم قبل از رسیدن به میدلور MVC، زبان جاری (همون fa) رو توسط سیستم مسیریابی بخونیم و Culture برنامه رو تغییر بدیم ولی تا زمانی که به میدلور MVC نرسیم این کار امکان پذیر نیست
🔸 یک مثال دیگر آن استفاده از خاصیت EnableCorsAttribute (است که بر خلاف app.UseCors که مکانیزم CORS را به صورت سراسری اعمال میکند) میتوان آن را بر روی یک Action خاص اعمال کرد
از آنجایی که در مکانیزم مسیریابی قبلی، سیستم Routing بسیار وابسته به MVC است ما نمی تونیم قبل از رسیدن به میدلور MVC جلوی درخواست های غیر مجاز رو بگیریم، چرا که به Routing درسترسی نداریم و نمیدونیم کدوم Controller و Action قراره فراخوانی بشه
🔹 توی مکانیزم Endpoint Routing اما، وقتی یه درخواست میاد، همون ابتدا مشخص میشه که به کدوم Route مپ شده درنتیجه بقیه میدلور های قبل از میدلور MVC هم میتونن از سیستم Routing استفاده کرده و اطلاعات داخل Url رو درک کنن
🔸 این قابلیت در ASP Core 2.2 اوایل با نام Dispatcher معرفی شد که بعدا به Endpoint Routing تغییر نام پیدا کرد و به صورت پیشفرض توسط SetCompatibilityVersion ورژن Version_2_2 به بالا فعال میشه
🔹 برای استفاده از Endpoint Routing باید میدلور UseEndpointRouting رو اضافه کنید. کار این midlleware تشخیص Endpoint مورد نظر براساس Url درخواستی و Route های تعریف شده است و پس از آن شما میتوانید از مقادیر مسیریابی (RouteValues) استفاده کنید (حتی قبل از رسیدن به محل تعریف Route ها)
نحوه استفاده از این قابلیت در ASPNET Core 2.2 به صورت زیر است
// ASP.NET Core 2.2نکته : در ASPNET Core 3.0 متد UseEndpointRouting به UseRouting تغییر نام پیدا کرد و نیز تعریف Route (بهتره بگیم Endpoint ها) به شکل زیر تغییر پیدا کرده
public void Configure(IApplicationBuilder app)
{
app.UseEndpointRouting();
app.OtherMiddleware(); // Access to route values
app.UseMvc();
}
// ASP.NET Core 3.0برای غیر فعال کردن قابلیت Endpoint Routing میتوانید توسط MvcOptions.EnableEndpointRouting = false آن را غیرفعال کنید.
public void Configure(IApplicationBuilder app)
{
app.UseRouting();
app.OtherMiddleware();
app.UseEndpoints(endpoints =>
{
// Mapping of endpoints goes here:
endpoints.MapControllers()
endpoints.MapRazorPages()
endpoints.MapHub<MyChatHub>()
endpoints.MapGrpcService<MyCalculatorService>()
});
}
لینک مقاله در دات نت تیپس:
https://www.dotnettips.info/post/3031
_______________
@IranAspMvc
Forwarded from اِسکیلی Skilly (مهدی کرامتی)
🔗📚 توصیه هایی برای شکل آدرس های URL در وب سایت ها:
در ادامه، توصیه های عمومی که برنامه نویس ها بهتر در طراحی ترکیب آدرس های وب شان رعایت کنند ذکر شده است:
1️⃣ سعی کنید URL ها بیانگر محتوایی باشند که کاربر پس از باز کردن URL آن را خواهد دید، نه اینکه حول محور نحوه پیاده سازی برنامه شما باشند. بعنوان مثال بهتر است به جای /Website_v2/CachedContentServer/FromCache/AnnualReport از /Articles/AnnualReport استفاده شود.
2️⃣ سعی کنید بجای استفاده از اعداد در آدرس از حروف استفاده کنید. مثلا بجای /Articles/2392 از /Articles/AnnualReportاستفاده کنید.
اگر بخاطر کاهش تعداد کوئری هایی که قرار است به دیتابیس بزنید نیاز به شناسه کتاب دارید داشتن آدرسی مانند /Articles/2392/AnnualReport بهتر است. تایپ چنین آدرسی کمی بیشتر زمان می برد، اما مخاطب شما درک بهتری از محتوای آدرس خواهد داشت. همچنین داشتن چنین آدرسی در بهبود رتبه سایت شما در موتورهای جستجو نیز تاثیر دارد. هنگام خواندن این آدرس در برنامه کافی است فقط قسمت عددی آدرس را در قالب یک پارامتر بخوانید.
3️⃣ به عنوان پسوند صفحه از پسوندهای گمراه کنند مانند .zip و .pdf و استفاده نکنید. Web Browser ها توجهی به پسوند آدرس شما ندارند و برای شان Mime Type پاسخ سایت مهم است، اما مخاطبان سایت شما انسان هستند و وقتی لینکی را می بینند که پسوند آن .pdf است توقع دارند با کلیک بر روی آن یک فایل PDF برای شان باز شود.
4️⃣ سعی کنید در ترکیب URL های تان سلسله مراتب یک صفحه را القا کنید. به عنوان مثال مخاطب سایت شما با نگاه کردن به URL ای مانند /Products/Menswear/Shirts/Red می تواند درک کند این آدرس مربوط به کالایی از گروه لباس های مردانه، پیراهن و با رنگ قرمز است.
5️⃣ سعی کنید آدرس شما حساس به حروف بزرگ و کوچک نباشد، چرا که ممکن است کسی بخواهد آدرس صفحه شما را از روی یک کاغذ پرینت شده خوانده و در Browser تایپ کند. سیستم Routing در ASP.NET Core نیز به حروف بزرگ و کوچک حساس نیست.
6️⃣ از بکار بردن علائم و ترتیب کاراکترها در URL خودداری کنید. اگر نیاز دارید در آدرس تان فاصله بیاندازید بجای فاصله از کاراکتر dash (همان -) استفاده کنید (مثال: /my-great-article). استفاده از کاراکتر Underscore (یا _) پسندیده نیست. همچنین استفاده از فاصله های URL Encoded آزار دهنده است (مثلا /my+great+article یا /my%20great%20article آدرس جالبی محسوب نمی شود).
7️⃣ آدرس های URL تان را عوض نکنید. URL هایی که کار نمی کنند به منزله یک بیزنس شکست خورده هستند. اگر بنا بر هر دلیلی نیاز به عوض کردن URL هایتان دارید با افزودن پشتیبانی URL های قدیمی تان و هدایت آن ها به آدرس جدید از افت رتبه Seo تان جلوگیری کنید.
8️⃣ سعی کنید الگوی URL ها در تمام برنامه تان شکل مشابهی داشته باشد.
🔗 جِیکوب نیِلسِن توصیه هایی مشابه موارد فوق را در صفحه اش بیان کرده است:
https://www.nngroup.com/articles/url-as-ui
🔗 آقای تیم بِرنِرز لی (خالق وب) نیز توصیه های مشابهی دارد:
https://www.w3.org/Provider/Style/URI
با تقدیم احترام
#مهدی_کرامتی
@barnamenevis_org
در ادامه، توصیه های عمومی که برنامه نویس ها بهتر در طراحی ترکیب آدرس های وب شان رعایت کنند ذکر شده است:
1️⃣ سعی کنید URL ها بیانگر محتوایی باشند که کاربر پس از باز کردن URL آن را خواهد دید، نه اینکه حول محور نحوه پیاده سازی برنامه شما باشند. بعنوان مثال بهتر است به جای /Website_v2/CachedContentServer/FromCache/AnnualReport از /Articles/AnnualReport استفاده شود.
2️⃣ سعی کنید بجای استفاده از اعداد در آدرس از حروف استفاده کنید. مثلا بجای /Articles/2392 از /Articles/AnnualReportاستفاده کنید.
اگر بخاطر کاهش تعداد کوئری هایی که قرار است به دیتابیس بزنید نیاز به شناسه کتاب دارید داشتن آدرسی مانند /Articles/2392/AnnualReport بهتر است. تایپ چنین آدرسی کمی بیشتر زمان می برد، اما مخاطب شما درک بهتری از محتوای آدرس خواهد داشت. همچنین داشتن چنین آدرسی در بهبود رتبه سایت شما در موتورهای جستجو نیز تاثیر دارد. هنگام خواندن این آدرس در برنامه کافی است فقط قسمت عددی آدرس را در قالب یک پارامتر بخوانید.
3️⃣ به عنوان پسوند صفحه از پسوندهای گمراه کنند مانند .zip و .pdf و استفاده نکنید. Web Browser ها توجهی به پسوند آدرس شما ندارند و برای شان Mime Type پاسخ سایت مهم است، اما مخاطبان سایت شما انسان هستند و وقتی لینکی را می بینند که پسوند آن .pdf است توقع دارند با کلیک بر روی آن یک فایل PDF برای شان باز شود.
4️⃣ سعی کنید در ترکیب URL های تان سلسله مراتب یک صفحه را القا کنید. به عنوان مثال مخاطب سایت شما با نگاه کردن به URL ای مانند /Products/Menswear/Shirts/Red می تواند درک کند این آدرس مربوط به کالایی از گروه لباس های مردانه، پیراهن و با رنگ قرمز است.
5️⃣ سعی کنید آدرس شما حساس به حروف بزرگ و کوچک نباشد، چرا که ممکن است کسی بخواهد آدرس صفحه شما را از روی یک کاغذ پرینت شده خوانده و در Browser تایپ کند. سیستم Routing در ASP.NET Core نیز به حروف بزرگ و کوچک حساس نیست.
6️⃣ از بکار بردن علائم و ترتیب کاراکترها در URL خودداری کنید. اگر نیاز دارید در آدرس تان فاصله بیاندازید بجای فاصله از کاراکتر dash (همان -) استفاده کنید (مثال: /my-great-article). استفاده از کاراکتر Underscore (یا _) پسندیده نیست. همچنین استفاده از فاصله های URL Encoded آزار دهنده است (مثلا /my+great+article یا /my%20great%20article آدرس جالبی محسوب نمی شود).
7️⃣ آدرس های URL تان را عوض نکنید. URL هایی که کار نمی کنند به منزله یک بیزنس شکست خورده هستند. اگر بنا بر هر دلیلی نیاز به عوض کردن URL هایتان دارید با افزودن پشتیبانی URL های قدیمی تان و هدایت آن ها به آدرس جدید از افت رتبه Seo تان جلوگیری کنید.
8️⃣ سعی کنید الگوی URL ها در تمام برنامه تان شکل مشابهی داشته باشد.
🔗 جِیکوب نیِلسِن توصیه هایی مشابه موارد فوق را در صفحه اش بیان کرده است:
https://www.nngroup.com/articles/url-as-ui
🔗 آقای تیم بِرنِرز لی (خالق وب) نیز توصیه های مشابهی دارد:
https://www.w3.org/Provider/Style/URI
با تقدیم احترام
#مهدی_کرامتی
@barnamenevis_org
Forwarded from TondTech
بهترین کامپوننتهای UI برای Angular در سال 2019
✔️ Angular Material (Official library)
✔️ Onsen UI
✔️ NG Bootstrap
✔️ NGX Bootstrap
✔️ NG-Lightning
✔️ Clarity
✔️ Vaadin Components
✔️ PrimeNG
✔️ MDBootstrap
✔️ Teradata Covalent UI Platform
✔️ Amexio
✔️ DevExtreme
✔️ Wijmo
✔️ jQwidgets
✔️ Kendo UI
منابع :
https://hackernoon.com/top-8-angular-component-libraries-you-should-know-in-2019-68fcfdc6a093
https://www.ngdevelop.tech/best-angular-ui-component-libraries/
_______________
@IranAspMvc
✔️ Angular Material (Official library)
✔️ Onsen UI
✔️ NG Bootstrap
✔️ NGX Bootstrap
✔️ NG-Lightning
✔️ Clarity
✔️ Vaadin Components
✔️ PrimeNG
✔️ MDBootstrap
✔️ Teradata Covalent UI Platform
✔️ Amexio
✔️ DevExtreme
✔️ Wijmo
✔️ jQwidgets
✔️ Kendo UI
منابع :
https://hackernoon.com/top-8-angular-component-libraries-you-should-know-in-2019-68fcfdc6a093
https://www.ngdevelop.tech/best-angular-ui-component-libraries/
_______________
@IranAspMvc
🔰 #آیا_میدانستید
توی کنسول مروگر میتونین با دستور console.table، آرایه ها و لیست ها تون رو به صورت جدولی نشون بدین؟
مثال های بیشتر:
https://www.telerik.com/blogs/better-visualization-of-console-data-with-tables
__________
@IranAspMvc
توی کنسول مروگر میتونین با دستور console.table، آرایه ها و لیست ها تون رو به صورت جدولی نشون بدین؟
var exampleArray = [
"First item in the array",
"I'm the second item in this array",
"Obviously i'm the last item"
];
console.table(exampleArray);
مثال های بیشتر:
https://www.telerik.com/blogs/better-visualization-of-console-data-with-tables
__________
@IranAspMvc
Forwarded from Ref.Codes (Meysam Khoshbakht)
Media is too big
VIEW IN TELEGRAM
✅ کنفرانس Microsoft Build شروع شد
از لینک های زیر میتونین به صورت زنده مشاهده کنین
https://mybuild.techcommunity.microsoft.com/home#top-anchor
اگه مشکلی با فیلترینگ ندارید، یوتیوب زیرنویس بهتری ارائه میده
https://www.youtube.com/watch?v=ZbpjLchrYgw
سعی میکنیم تحلیل و بررسی اخبار جدید و مهم اش رو به زودی توی کانال منتشر کنیم
متاسفانه قسمت جدید GOT هم منتشر شده و باید قید Build رو بزنیم 😅
______________
@IranAspMvc
از لینک های زیر میتونین به صورت زنده مشاهده کنین
https://mybuild.techcommunity.microsoft.com/home#top-anchor
اگه مشکلی با فیلترینگ ندارید، یوتیوب زیرنویس بهتری ارائه میده
https://www.youtube.com/watch?v=ZbpjLchrYgw
سعی میکنیم تحلیل و بررسی اخبار جدید و مهم اش رو به زودی توی کانال منتشر کنیم
متاسفانه قسمت جدید GOT هم منتشر شده و باید قید Build رو بزنیم 😅
______________
@IranAspMvc
Forwarded from کدهک
مایکروسافت اعلام کرد نسخه ی بعدی دات نت ورژن 5 خواهد که در سال 2020 منتشر میشود.
این نسخه ی به صورت یکپارچه شامل NET Core و Mono می شود و قرار است برنامه نویسی WPF و Windows Form را شامل شود.
هدف اصلی مایکروسافت این است که همه ی نسخه های موجود دات نت را ترکیب کند و یک پلتفرم واحد ارائه کند. این یکپارچه سازی می تواند فرآیند پیاده سازی نرم افزار بر پایه ی دات نت را بسیار ساده تر کند.
دات نت 5 در ادامه ی دات نت کور بوده و به صورت متن باز توسعه داده خواهد شد.
این نسخه ی به صورت یکپارچه شامل NET Core و Mono می شود و قرار است برنامه نویسی WPF و Windows Form را شامل شود.
هدف اصلی مایکروسافت این است که همه ی نسخه های موجود دات نت را ترکیب کند و یک پلتفرم واحد ارائه کند. این یکپارچه سازی می تواند فرآیند پیاده سازی نرم افزار بر پایه ی دات نت را بسیار ساده تر کند.
دات نت 5 در ادامه ی دات نت کور بوده و به صورت متن باز توسعه داده خواهد شد.
✅ معرفی Windows Terminal
مایکروسافت در روز اول کنفرانس Build 2019 از برنامه ای به نام Windows Terminal پرده برداری کرد.
این برنامه، یک ترمینال مرکزی برای دسترسی به PowerShell و Cmd و WSL (کرنل Linux در Windows) است.
این برنامه گرافیک بهتری دارد و دارای قابلیت Multiple Tab - Theming and Styling - Emoji and GPU text-rendering - Syntax Highlight می باشد.
ویدیوی دموی برنامه (حتما ببینین) :
https://aka.ms/terminal-video
اطلاعات بیشتر :
https://devblogs.microsoft.com/commandline/introducing-windows-terminal/
مخزن پروژه در گیتهاب :
https://github.com/Microsoft/Terminal
_______________
@IranAspMvc
مایکروسافت در روز اول کنفرانس Build 2019 از برنامه ای به نام Windows Terminal پرده برداری کرد.
این برنامه، یک ترمینال مرکزی برای دسترسی به PowerShell و Cmd و WSL (کرنل Linux در Windows) است.
این برنامه گرافیک بهتری دارد و دارای قابلیت Multiple Tab - Theming and Styling - Emoji and GPU text-rendering - Syntax Highlight می باشد.
ویدیوی دموی برنامه (حتما ببینین) :
https://aka.ms/terminal-video
اطلاعات بیشتر :
https://devblogs.microsoft.com/commandline/introducing-windows-terminal/
مخزن پروژه در گیتهاب :
https://github.com/Microsoft/Terminal
_______________
@IranAspMvc
Forwarded from اِسکیلی Skilly (مهدی کرامتی)
✅ معرفی ورژن 2 Windows Subsystem for Linux (به اختصار WSL 2)
ماکروسافت در یک اقدام جالب، کرنل لینوکس (ورژن 4.19 - آخرین ورژن پایدار و LTS) رو به طور کامل به ویندوز منتقل کرد.
در نتیجه امکان اجرای کانتینر های Docker به صورت Native در آن وجود دارد و دیگر نیازی به VM برای اجرای کانتینر ها بر روی Windows نیست!
همچنین ماکروسافت ادعا کرده در این روش، زمان boot time لینوکس و میزان رم مصرفی کاهش پیدا کرده و نیز عملیات I/O filesystem افزایش پرفرمنس داشته است.
این یه حرکت بزرگ است و اولین باری هست که کرنل لینوکس به عنوان بخشی از ویندوز قرار می گیرد.
این قابلیت، اواخر امسال همراه با اپدیت ویندوز 10 به نام (Codename 19H2) عرضه خواهد شد.
اطلاعات بیشتر :
https://devblogs.microsoft.com/commandline/shipping-a-linux-kernel-with-windows
@barnamenevis_org
ماکروسافت در یک اقدام جالب، کرنل لینوکس (ورژن 4.19 - آخرین ورژن پایدار و LTS) رو به طور کامل به ویندوز منتقل کرد.
در نتیجه امکان اجرای کانتینر های Docker به صورت Native در آن وجود دارد و دیگر نیازی به VM برای اجرای کانتینر ها بر روی Windows نیست!
همچنین ماکروسافت ادعا کرده در این روش، زمان boot time لینوکس و میزان رم مصرفی کاهش پیدا کرده و نیز عملیات I/O filesystem افزایش پرفرمنس داشته است.
این یه حرکت بزرگ است و اولین باری هست که کرنل لینوکس به عنوان بخشی از ویندوز قرار می گیرد.
این قابلیت، اواخر امسال همراه با اپدیت ویندوز 10 به نام (Codename 19H2) عرضه خواهد شد.
اطلاعات بیشتر :
https://devblogs.microsoft.com/commandline/shipping-a-linux-kernel-with-windows
@barnamenevis_org
Forwarded from کدهک
🔰 بررسی تغییرات جدید NET Core 3.0 Preview 5
توی این نسخه که همزمان با کنفرانس Microsoft Build 2019 منتشر شد شاهد تغییرات کم ولی مهمی هستیم.
🔸بهبود های WPF و Windows Forms
توی این نسخه پرفرمنس Startup (اجرای اولیه) این دو تکنولوژی به لطف قابلیتی به نام AOT Compilation افزایش پیدا کرده
ما 2 روش کامپایل داریم:
یکی حالت معمولی که کد رو به یک زبان میانی (توی دات نت بهش IL یا CIL هم میگن) کامپایل میکنه، در واقع DLL های خروجی پروژه ها شامل کد های IL یا همون Intermediate Language هستند و توسط Just-In-Time (به اختصار JIT) اجرا میشن
روش دوم که پرفرمنس خیلی بیشتری داره اسمش هست Ahead-Of-Time (یا به اختصار AOT) که کد ها رو نه به یک زبان میانی، بلکه مستقیما به کد ماشین (Native) تبدیل میکنه
در این روش کد ها مستقیما بر روی سیستم عامل اجرا میشن و شامل کد های Optimize شده برای همون سیستم عامل هستند
حالا یه چیز جدیدی به نام Runtime دیگه برای NET Core هم هست به نام CoreRT که برای همین AOT Compilation کاربرد داره و دیگه نهایت سرعته و قراره به عنوان بخشی از NET 5. منتشر بشه. [بعدا در موردش صحبت خواهیم کرد]
🔹بهبود های کلاس SqlClient
این کلاس، جز کلاس های پایه ADO.NET هست و کارش دسترسی به دیتابیس SQL Server هست و توی ORM ها از جمله EF/EF Core و Dapper هم از همین کلاس استفاده شده
این کلاس جز کلاس های پایه NET Framework و Core بوده (داخل اسمبلی System.Data.dll) و به صورت Package جدا گانه نیست به همین خاطر هر موقع فیچر های جدیدی بهش اضافه میشد باید صبر میکردیم تا آپدیت جدید دات نت بیاد تا بتونیم ازش استفاده کنیم
ولی الان ماکروسافت اون رو به یه پکیج جداگانه به نام Microsoft.Data.SqlClient منتقل کرده تا بتونه سریع تر براش آپدیت بده. همین الان بهبود هایی بهش اضافه شده و قراره در کنار توسعه دات نت کور، این پکیچ هم توسعه و بهبود داده بشه
کلاس قبلی (System.Data.SqlClient) قرار نیست حذف بشه و بروزرسانی های مهم رو دریافت خواهد کرد پس نگران تغییر نباشید ولی برای استفاده از کلاس جدید :
اگه از این کلاس به صورت مستقم (به روش ADO.NET) استفاده کردید به راحتی با نصب این پکیج و تغییر به namespace مورد نظر میتونین ازش استفاده کنین ولی اگه از ORM هایی مثل EF Core یا Dapper استفاده میکنین باید صبر کنین تا این ORM ها هم از این پکیج جدید استفاده کنن
🔸پابلیش تک فایلی یا (Single EXEs)
از این پس میتونین خروجی پروژه هاتون رو به صورت یک فایل تکی پابلیش بگیرید. دیگه لازم نیست کلی فایل رو توی سیستم مشتری کپی کنین
این فایل به صورت self-extracting خواهد بود و تمام DLL ها و فایل های مورد نیازش (Dependencies) رو داخل خودش Embed کرده و موقع اجرا، فایل ها رو تو یه مسیر Temp کپی میکنه و Load شون میکنه
🔹بهبود های JSON Serializer
قبلا در مورد JSON Serializer داخلی فوق سریع توی NET Core 3.0 Preview 2 صحبت کردیم. اینبار اما یه سری بهبود و تغییرات دیزاینی تو پیاده سازیش داشته که خیلی کاربردی نیست پس ازش میگذریم [اطلاعات بیشتر]
🔸تغییرات Index و Range
توی سی شارپ 8 شاهد قابلیت جدید و باحالی به نام index و range بودیم که توی NET Core 3 هم کم کم پیاده سازی شد ولی الان ماکروسافت تصمیم گرفته بر اساس فیدبک های کامیونتی یه سری تغییر در این رابطه انجام بده
این تغییرات و مثال هاش کمی طولانیه و اینجا جا نمیشه. [اطلاعات بیشتر]
🔹تغییرات دیگه ای هم بوده که زیاد مهم نیستند یا خیلی تخصصی اند
اطلاعات بیشتر :
https://devblogs.microsoft.com/dotnet/announcing-net-core-3-0-preview-5/
_______________
@IranAspMvc
توی این نسخه که همزمان با کنفرانس Microsoft Build 2019 منتشر شد شاهد تغییرات کم ولی مهمی هستیم.
🔸بهبود های WPF و Windows Forms
توی این نسخه پرفرمنس Startup (اجرای اولیه) این دو تکنولوژی به لطف قابلیتی به نام AOT Compilation افزایش پیدا کرده
ما 2 روش کامپایل داریم:
یکی حالت معمولی که کد رو به یک زبان میانی (توی دات نت بهش IL یا CIL هم میگن) کامپایل میکنه، در واقع DLL های خروجی پروژه ها شامل کد های IL یا همون Intermediate Language هستند و توسط Just-In-Time (به اختصار JIT) اجرا میشن
روش دوم که پرفرمنس خیلی بیشتری داره اسمش هست Ahead-Of-Time (یا به اختصار AOT) که کد ها رو نه به یک زبان میانی، بلکه مستقیما به کد ماشین (Native) تبدیل میکنه
در این روش کد ها مستقیما بر روی سیستم عامل اجرا میشن و شامل کد های Optimize شده برای همون سیستم عامل هستند
حالا یه چیز جدیدی به نام Runtime دیگه برای NET Core هم هست به نام CoreRT که برای همین AOT Compilation کاربرد داره و دیگه نهایت سرعته و قراره به عنوان بخشی از NET 5. منتشر بشه. [بعدا در موردش صحبت خواهیم کرد]
🔹بهبود های کلاس SqlClient
این کلاس، جز کلاس های پایه ADO.NET هست و کارش دسترسی به دیتابیس SQL Server هست و توی ORM ها از جمله EF/EF Core و Dapper هم از همین کلاس استفاده شده
این کلاس جز کلاس های پایه NET Framework و Core بوده (داخل اسمبلی System.Data.dll) و به صورت Package جدا گانه نیست به همین خاطر هر موقع فیچر های جدیدی بهش اضافه میشد باید صبر میکردیم تا آپدیت جدید دات نت بیاد تا بتونیم ازش استفاده کنیم
ولی الان ماکروسافت اون رو به یه پکیج جداگانه به نام Microsoft.Data.SqlClient منتقل کرده تا بتونه سریع تر براش آپدیت بده. همین الان بهبود هایی بهش اضافه شده و قراره در کنار توسعه دات نت کور، این پکیچ هم توسعه و بهبود داده بشه
کلاس قبلی (System.Data.SqlClient) قرار نیست حذف بشه و بروزرسانی های مهم رو دریافت خواهد کرد پس نگران تغییر نباشید ولی برای استفاده از کلاس جدید :
اگه از این کلاس به صورت مستقم (به روش ADO.NET) استفاده کردید به راحتی با نصب این پکیج و تغییر به namespace مورد نظر میتونین ازش استفاده کنین ولی اگه از ORM هایی مثل EF Core یا Dapper استفاده میکنین باید صبر کنین تا این ORM ها هم از این پکیج جدید استفاده کنن
🔸پابلیش تک فایلی یا (Single EXEs)
از این پس میتونین خروجی پروژه هاتون رو به صورت یک فایل تکی پابلیش بگیرید. دیگه لازم نیست کلی فایل رو توی سیستم مشتری کپی کنین
این فایل به صورت self-extracting خواهد بود و تمام DLL ها و فایل های مورد نیازش (Dependencies) رو داخل خودش Embed کرده و موقع اجرا، فایل ها رو تو یه مسیر Temp کپی میکنه و Load شون میکنه
🔹بهبود های JSON Serializer
قبلا در مورد JSON Serializer داخلی فوق سریع توی NET Core 3.0 Preview 2 صحبت کردیم. اینبار اما یه سری بهبود و تغییرات دیزاینی تو پیاده سازیش داشته که خیلی کاربردی نیست پس ازش میگذریم [اطلاعات بیشتر]
🔸تغییرات Index و Range
توی سی شارپ 8 شاهد قابلیت جدید و باحالی به نام index و range بودیم که توی NET Core 3 هم کم کم پیاده سازی شد ولی الان ماکروسافت تصمیم گرفته بر اساس فیدبک های کامیونتی یه سری تغییر در این رابطه انجام بده
این تغییرات و مثال هاش کمی طولانیه و اینجا جا نمیشه. [اطلاعات بیشتر]
🔹تغییرات دیگه ای هم بوده که زیاد مهم نیستند یا خیلی تخصصی اند
اطلاعات بیشتر :
https://devblogs.microsoft.com/dotnet/announcing-net-core-3-0-preview-5/
_______________
@IranAspMvc
.NET Blog
Announcing .NET Core 3.0 Preview 5 | .NET Blog
Today, we are announcing .NET Core 3.0 Preview 5. It includes a new Json serializer, support for publishing single file executables, an update to runtime roll-forward, and changes in the BCL. If you missed it, check out the improvements we released in .NET…
✅ معرفی ML.NET 1.0
🔸همزمان با کنفرانس Microsoft Build نسخه 1.0 ML.NET منتشر شد. ML.NET فریمورک سورس باز و کراس پلتفرم برای یادگیری ماشین مخصوص دات نت هست.
🔹توسط ML.NET میتونین به زبان های C# و F# برای سناریو های مختلفی از جمله تجزیه و تحلیل احساسات، طبقه بندی متون، تشخیص آنومالی (ناهنجاری)، پیش بینی و تخمین، سیستم های توصیه گر (recommendations) و... برنامه های مدل سازی یادگیری ماشین چند سکویی (قابل اجرا بر روی Linux, Mac و Windows) ایجاد کنید.
مثال های کار با ML.NET رو میتونین در ریپازیتوری زیر مشاهده کنین
https://github.com/dotnet/machinelearning-samples
🔸این فریمورک توسط واحد تحقیقاتی ماکروسافت توسعه داده شده و هم اکنون در برنامه های مختلفی از جمله Windows ،Azure ،Bing, Office, PowerBI و نیز سازمان های مختلفی داره استفاده میشه
🔹همچنین قابلیت انعطاف پذیری و گسترش پذیری بالایی داشته و ازفریمورک های مطرح دیگه مانند TensorFlow و Accord.Net و ONNX (فرمت مدل های یادگیری عمیق) پشتیبانی میکنه
🔸از مزایای این فریمورک میتوان به موارد زیر اشاره کرد
- قابلیت AutoML : که وظیفه آن انتخاب هوشمند الگوریتم و ساده/هوشمند سازی فرایند مدل سازی هست
- ابزار Model Builder : یک ابزار UI برای ساخت مدل های ML توسط AutoML
- ابزار ML.NET CLI : یک ابزار command line برای کار با ML.NET و AutoML
اطلاعات بیشتر :
https://devblogs.microsoft.com/dotnet/announcing-ml-net-1-0/
https://devblogs.microsoft.com/cesardelatorre/what-is-ml-net-1-0-machine-learning-for-net/
_______________
@IranAspMvc
🔸همزمان با کنفرانس Microsoft Build نسخه 1.0 ML.NET منتشر شد. ML.NET فریمورک سورس باز و کراس پلتفرم برای یادگیری ماشین مخصوص دات نت هست.
🔹توسط ML.NET میتونین به زبان های C# و F# برای سناریو های مختلفی از جمله تجزیه و تحلیل احساسات، طبقه بندی متون، تشخیص آنومالی (ناهنجاری)، پیش بینی و تخمین، سیستم های توصیه گر (recommendations) و... برنامه های مدل سازی یادگیری ماشین چند سکویی (قابل اجرا بر روی Linux, Mac و Windows) ایجاد کنید.
مثال های کار با ML.NET رو میتونین در ریپازیتوری زیر مشاهده کنین
https://github.com/dotnet/machinelearning-samples
🔸این فریمورک توسط واحد تحقیقاتی ماکروسافت توسعه داده شده و هم اکنون در برنامه های مختلفی از جمله Windows ،Azure ،Bing, Office, PowerBI و نیز سازمان های مختلفی داره استفاده میشه
🔹همچنین قابلیت انعطاف پذیری و گسترش پذیری بالایی داشته و ازفریمورک های مطرح دیگه مانند TensorFlow و Accord.Net و ONNX (فرمت مدل های یادگیری عمیق) پشتیبانی میکنه
🔸از مزایای این فریمورک میتوان به موارد زیر اشاره کرد
- قابلیت AutoML : که وظیفه آن انتخاب هوشمند الگوریتم و ساده/هوشمند سازی فرایند مدل سازی هست
- ابزار Model Builder : یک ابزار UI برای ساخت مدل های ML توسط AutoML
- ابزار ML.NET CLI : یک ابزار command line برای کار با ML.NET و AutoML
اطلاعات بیشتر :
https://devblogs.microsoft.com/dotnet/announcing-ml-net-1-0/
https://devblogs.microsoft.com/cesardelatorre/what-is-ml-net-1-0-machine-learning-for-net/
_______________
@IranAspMvc
❇️ ساخت برنامه های ویندوزی توسط React Native
🔸ماکروسافت در یک اقدام جالب، پروژه ای به نام "React Native for Windows" ایجاد کرده که توسط آن میتوان با React Native برنامه های UWP با پرفرمنس بالا برای Windows 10 ساخت
🔹در نسخه فعلی (current)، کامپیوننت های ویندوز با زبان سی شارپ برای استفاده در React Native نوشته شده اند ولی در نسخه جدید (vnext)، ماکروسافت بسیاری از کامپوننت های ویندوز را به زبان C++ برای React Native در جهت افزایش پرفرمنس باز نویسی کرده
🔸برنامه های ساخته شده با این تکنولوژی، همانند UWP توانایی اجرا بر روی تمامی دیوایس هایی که از ویندوز 10 پشتیبانی میکنند را دارد مانند HoloLens, Xbox, PC
و...
ریپازیتوری گیتهاب :
https://github.com/Microsoft/react-native-windows
_______________
@IranAspMvc
🔸ماکروسافت در یک اقدام جالب، پروژه ای به نام "React Native for Windows" ایجاد کرده که توسط آن میتوان با React Native برنامه های UWP با پرفرمنس بالا برای Windows 10 ساخت
🔹در نسخه فعلی (current)، کامپیوننت های ویندوز با زبان سی شارپ برای استفاده در React Native نوشته شده اند ولی در نسخه جدید (vnext)، ماکروسافت بسیاری از کامپوننت های ویندوز را به زبان C++ برای React Native در جهت افزایش پرفرمنس باز نویسی کرده
🔸برنامه های ساخته شده با این تکنولوژی، همانند UWP توانایی اجرا بر روی تمامی دیوایس هایی که از ویندوز 10 پشتیبانی میکنند را دارد مانند HoloLens, Xbox, PC
و...
ریپازیتوری گیتهاب :
https://github.com/Microsoft/react-native-windows
_______________
@IranAspMvc
❇️ ویژوال استودیو آنلاین شد!
در کنفرانس بیلد، مایکروسافت از پیشنمایش یک Code Editor آنلاین خبر داد که Visual Studio Online نام دارد
این ویرایشگر بر پایه VS Code بوده و از تمام افزونه های VS Code و نیز InteliCode (قابلیت IntelliSense با توانایی هوش مصنوعی برای کمک به کد نویسی) پیشتیبانی میکنه
البته قرار نیست این این ویرایشگر، به محیط اصلی کد نویسی شما تبدیل بشه بلکه هدفش فقط یک ابزار کمکی برای مرور کد ها و Pull Request ها و نیز Live Share (کد نویسی اشتراکی) در وب هستش
اگه اسم Visual Studio آنلاین براتون آشناس به خاطر اینه که قبلا به TFS انلاین یا همون VSTS، این اسم رو میگفتن ولی یک سال قبل اسمش به Azure DevOps تغییر پیدا کرد.
ضمنا پروژه مشابهی به نام code-server وجود داره که VS Code رو به صورت Remote روی یک سرور اجرا میکنه و با مرورگر میشه بهش دسترسی داشت
در آینده میتونین توسط ادرس زیر از Visual Stuido Online استفاده کنین
https://online.visualstudio.com/
_______________
@IranAspMvc
در کنفرانس بیلد، مایکروسافت از پیشنمایش یک Code Editor آنلاین خبر داد که Visual Studio Online نام دارد
این ویرایشگر بر پایه VS Code بوده و از تمام افزونه های VS Code و نیز InteliCode (قابلیت IntelliSense با توانایی هوش مصنوعی برای کمک به کد نویسی) پیشتیبانی میکنه
البته قرار نیست این این ویرایشگر، به محیط اصلی کد نویسی شما تبدیل بشه بلکه هدفش فقط یک ابزار کمکی برای مرور کد ها و Pull Request ها و نیز Live Share (کد نویسی اشتراکی) در وب هستش
اگه اسم Visual Studio آنلاین براتون آشناس به خاطر اینه که قبلا به TFS انلاین یا همون VSTS، این اسم رو میگفتن ولی یک سال قبل اسمش به Azure DevOps تغییر پیدا کرد.
ضمنا پروژه مشابهی به نام code-server وجود داره که VS Code رو به صورت Remote روی یک سرور اجرا میکنه و با مرورگر میشه بهش دسترسی داشت
در آینده میتونین توسط ادرس زیر از Visual Stuido Online استفاده کنین
https://online.visualstudio.com/
_______________
@IranAspMvc
🔰 اخبار جدید مایکروسافت در مورد مرورگر Edge
مروگر جدید Edge که به جای IE، برپایه Chromium توسعه داده شده کراس پلتفرم بوده و هم اکنون در Android و IOS هم قابل استفاده است
ماکروسافت در کنفرانس بیلد به معرفی فیچر های جدید این مروگر پرداخت از جمله :
قابلیت IE Mode :
توسط این قابلیت میتوان سایت ها و اپ های قدیمی که با مروگر های مدرن سازگاری ندارند را توسط موتور رندرینگ Internet Explorer لود کرد.
قابلیت جمع آوری و آرشیو محتوا
توسط این قابلیت میتوان متن ها و عکس های مفید سایت ها را جمع آوری کرده برای خود آرشیو کنید. میتوانید آن را با دوستانتان به اشتراک بگذارید و یا به صورت Excel یا Word خروجی بگیرید
ماکروسافت اعلام کرده که هم اکنون بر روی افزایش حریم خصوصی و جلوگیری از روش های Web Tracking (ردیابی فعالیت افراد در وب) تمرکز کرده و قراره حالتی به نام "Strict" رو به Edge اضافه کنه که هم جلوی تبلیغات مزاحم در سطح وب رو میگیره و هم بدافزار ها و Web Tracker ها رو مسدود میکنه
@IranAspMvc
مروگر جدید Edge که به جای IE، برپایه Chromium توسعه داده شده کراس پلتفرم بوده و هم اکنون در Android و IOS هم قابل استفاده است
ماکروسافت در کنفرانس بیلد به معرفی فیچر های جدید این مروگر پرداخت از جمله :
قابلیت IE Mode :
توسط این قابلیت میتوان سایت ها و اپ های قدیمی که با مروگر های مدرن سازگاری ندارند را توسط موتور رندرینگ Internet Explorer لود کرد.
قابلیت جمع آوری و آرشیو محتوا
توسط این قابلیت میتوان متن ها و عکس های مفید سایت ها را جمع آوری کرده برای خود آرشیو کنید. میتوانید آن را با دوستانتان به اشتراک بگذارید و یا به صورت Excel یا Word خروجی بگیرید
ماکروسافت اعلام کرده که هم اکنون بر روی افزایش حریم خصوصی و جلوگیری از روش های Web Tracking (ردیابی فعالیت افراد در وب) تمرکز کرده و قراره حالتی به نام "Strict" رو به Edge اضافه کنه که هم جلوی تبلیغات مزاحم در سطح وب رو میگیره و هم بدافزار ها و Web Tracker ها رو مسدود میکنه
@IranAspMvc
DotNetZoom
🔰دوره دوره API نویسی اصولی و حرفه ای در ASP.NET Core در این دوره همه نکات مهم و پرکاربرد در API نویسی اصولی و حرفه ای در ASP Core بررسی شده اند. همچنین سعی شده بهترین و محبوب ترین تکنولوژی ها، کتابخانه ها و ابزار ها داخل پروژه استفاده بشه. ونیز Best Practice…
🔰 بمناسبت ماه مبارک رمضان
🔸میتونین پکیج فوق رو با 40% درصد تخفیف تهیه کنین
🔹کد تخفیف : Ramazan
___
🔸میتونین پکیج فوق رو با 40% درصد تخفیف تهیه کنین
🔹کد تخفیف : Ramazan
___
Forwarded from Software Philosophy
با ایجاد هر تکنولوژی در دنیای نرم افزار ، انبوهی از قابلیتهای جدید ایجاد میشود که به توسعه دهندگان این امکان را میدهند تا برنامههایی با قابلیتهای بالا و کد کمتر ایجاد کنند . در لینک زیر 20 کتابخانه مبتنی بر .netcore معرفی شده است که هر برنامه نویسی ممکن است به آنها نیاز داشته باشد.
https://codinginfinite.com/best-top-dot-net-core-useful-libraries-open-source/
#شهریار_انتظام (http://ow.ly/qDN430nPiCg)
کانال تلگرام:
@SoftwarePhilosophy
___
https://codinginfinite.com/best-top-dot-net-core-useful-libraries-open-source/
#شهریار_انتظام (http://ow.ly/qDN430nPiCg)
کانال تلگرام:
@SoftwarePhilosophy
___
Coding Infinite
Best 20 dot Net Core Libraries Every Developer should know
In this article, I'm listing down some of the most useful but not very commonly used .Net Core Libraries that every developer needs to know.
Forwarded from Moien Tajik 💭
زمان مبحث خیلی بزرگ و پیچیده ای هست و اکثر ما تو ساخت بیشتر برنامه ها جوانب مختلفش رو نمیبینیم. ⏰
مواردی مثل UTC و Unix TIme و Offset و Leap و خیلی چیزای دیگه رو بدرستی نمیشناسیم. ⏳
فرق Instant و Duration و Interval و Period رو درست نمیدونیم. 🤷🏻♂️
بدون توجه به دونستن بعضی از این موارد میایم تاریخ هارو ذخیره میکنیم ، به هم تبدیل میکنم ، بهشون زمان های دیگه رو اضافه و کم میکنیم ; در حالی که همین کارهای بنظر ساده میتونن مشکل ساز بشن. ⚠️
بعنوان مثال اینکه اول به یک تاریخ ،ابتدا 3 روز و بعد 1 ماه اضافه کنیم و اینکه به همون تاریخ ، اول 1 ماه و بعد 3 روز اضافه کنیم باعث بوجود آمدن 2 تاریخ متفاوت میشه و نتایج یکسان نیست. ❌
نمونه مثال در #C :
وقتی میگیم 1 ماه ، منظورمون 31 روز ، 30 روز یا 29 روزه ؟ سال های کبیسه تو تاریخ ها چطور محاسبه میشن ؟ جلو و عقب رفتن ساعت تو 6 ماه اول و دوم اونم فقط تو بعضی کشورها چطور حساب میشه ⁉️
این ها همه مباحثی هستن که موقع کار با زمان باید در نظر گرفته بشه. Reference های زیادی برای یادگیری این موارد هست و Library های زیادی مخصوص هر زبان براشون نوشته شده. ✅
دوتا از این Reference ها رو میزارم که بهترینش کنفرانس Jon Skeet هست : kutt.it/time
و رفرنس بعدی ، این سوال در Stackoverflow هست که جواب های زیاد و کاملی از افراد مختلف گرفته :
https://stackoverflow.com/q/2532729/6661314
مواردی مثل UTC و Unix TIme و Offset و Leap و خیلی چیزای دیگه رو بدرستی نمیشناسیم. ⏳
فرق Instant و Duration و Interval و Period رو درست نمیدونیم. 🤷🏻♂️
بدون توجه به دونستن بعضی از این موارد میایم تاریخ هارو ذخیره میکنیم ، به هم تبدیل میکنم ، بهشون زمان های دیگه رو اضافه و کم میکنیم ; در حالی که همین کارهای بنظر ساده میتونن مشکل ساز بشن. ⚠️
بعنوان مثال اینکه اول به یک تاریخ ،ابتدا 3 روز و بعد 1 ماه اضافه کنیم و اینکه به همون تاریخ ، اول 1 ماه و بعد 3 روز اضافه کنیم باعث بوجود آمدن 2 تاریخ متفاوت میشه و نتایج یکسان نیست. ❌
نمونه مثال در #C :
using NodaTime;
var start = new LocalDateTime(2017, 1, 27, 9, 0, 0);
var end1 = start + (Period.FromDays(3) + Period.FromMonths(1));
var end2 = (start + Period.FromDays(3)) + Period.FromMonths(1);
〰️〰️〰️وقتی میگیم 1 ماه ، منظورمون 31 روز ، 30 روز یا 29 روزه ؟ سال های کبیسه تو تاریخ ها چطور محاسبه میشن ؟ جلو و عقب رفتن ساعت تو 6 ماه اول و دوم اونم فقط تو بعضی کشورها چطور حساب میشه ⁉️
این ها همه مباحثی هستن که موقع کار با زمان باید در نظر گرفته بشه. Reference های زیادی برای یادگیری این موارد هست و Library های زیادی مخصوص هر زبان براشون نوشته شده. ✅
دوتا از این Reference ها رو میزارم که بهترینش کنفرانس Jon Skeet هست : kutt.it/time
و رفرنس بعدی ، این سوال در Stackoverflow هست که جواب های زیاد و کاملی از افراد مختلف گرفته :
https://stackoverflow.com/q/2532729/6661314
YouTube
Working with Time is Easy Jon Skeet
Code involving dates and times is very often broken. This is partly due to poor APIs on many platforms, and partly due to a lack of awareness on the part of developers. Many developers despair when they think about time zones or different calendar systems…
✅ #یک_نکته
ترجیحا متد های async را به روش sync و توسط Task.Wait و Task.Result فراخوانی نکنید زیرا باید block شدن ترد جاری شده و حتی میتواند باعث dead-lock شود.
ولی اگر جایی مجبور شدید به این صورت استفاده کنید (مثلا در سازنده کلاس زیرا نمی توان async/await استفاده کرد) به جای
در روش اول اگر خطایی رخ دهد استثنای صادر شده را در یک AggregateException محصور شده پرتاب میکند که بررسی Detail آن سخت تر و نامفهوم تر است ولی در روش دوم اگر خطایی رخ دهد یک Exception معمولی پرتاب میشود
منابع :
https://codurance.com/2018/12/06/wait-and-getawaiter/
https://stackoverflow.com/questions/17284517
_______________
@IranAspMvc
ترجیحا متد های async را به روش sync و توسط Task.Wait و Task.Result فراخوانی نکنید زیرا باید block شدن ترد جاری شده و حتی میتواند باعث dead-lock شود.
ولی اگر جایی مجبور شدید به این صورت استفاده کنید (مثلا در سازنده کلاس زیرا نمی توان async/await استفاده کرد) به جای
task.Wait();حتما حتما از روش زیر استفاده کنید
var result = task.Result;
var result = task.GetAwaiter().GetResult();این روش دقیقا مانند روش اول است حتی بحث dead-lock و blocking ترد هم صادق است ولی ...
در روش اول اگر خطایی رخ دهد استثنای صادر شده را در یک AggregateException محصور شده پرتاب میکند که بررسی Detail آن سخت تر و نامفهوم تر است ولی در روش دوم اگر خطایی رخ دهد یک Exception معمولی پرتاب میشود
منابع :
https://codurance.com/2018/12/06/wait-and-getawaiter/
https://stackoverflow.com/questions/17284517
_______________
@IranAspMvc
🔰 معرفی Deno.js (شاید جایگزین Nodejs !)
سال قبل در کنفرانس JSConf 2018 خالق Nodejs از ساخت آن اظهار پشیمانی کرد و در مورد تعدادی از مشکلات آن ارائه داشت
https://www.youtube.com/watch?reload=9&v=M3BM9TB-8yA
سپس ماه قبل در کنفرانس JS Fest 2019، محصول جدیدی به نام Deno.js را ارائه کرد که مشابه Nodejs یک Runtime جاوااسکریپت بر فراز موتور V8 کروم است ولی با زبان های Rust و TypeScript نوشته شدهاست.
https://github.com/denoland/deno
https://deno.land/
_______________
@IranAspMvc
سال قبل در کنفرانس JSConf 2018 خالق Nodejs از ساخت آن اظهار پشیمانی کرد و در مورد تعدادی از مشکلات آن ارائه داشت
https://www.youtube.com/watch?reload=9&v=M3BM9TB-8yA
سپس ماه قبل در کنفرانس JS Fest 2019، محصول جدیدی به نام Deno.js را ارائه کرد که مشابه Nodejs یک Runtime جاوااسکریپت بر فراز موتور V8 کروم است ولی با زبان های Rust و TypeScript نوشته شدهاست.
https://github.com/denoland/deno
https://deno.land/
_______________
@IranAspMvc