یک نکته‌ی تکمیلی: روش استفاده از کتابخانه‌ها و کامپوننت‌های ثالث با Blazor 8x

همانطور که در این مطلب هم اشاره شد، حالت پیش‌فرض رندر در برنامه‌های Blazor 8x، فقط SSR است. بنابراین قسمت‌های تعاملی تمام کامپوننت‌ها (ثالث یا غیر ثالث) در این حالت کار نمی‌کنند؛ مگر اینکه:
- یکی از حالت‌های رندر تعاملی را در بالاترین سطح ممکن فعال کنید (اضافه کردن صریح rendermode@ در فایل App.razor به کامپوننت‌های HeadOutlet و Routes) تا تمام صفحات و کامپوننت‌های برنامه از آن ارث‌بری کنند.
- یا rendermode@ را در حین تعریف المان کامپوننت، صراحتا ذکر کنید (حالت تعریف رندر جزیره‌ای).
- یا rendermode@ را در حین تعریف صفحه‌ی جاری ذکر کنید تا تمام کامپوننت‌های واقع در آن صفحه، از آن ارث‌بری کنند.
استاندارد جدیدی در مرورگرها در حال پیاده سازی است، جهت محدود کردن استفاده از یک توکن یک کلاینت، فقط در همان مرورگر اولیه‌ای که آن‌را دریافت کرده و نه در سایر مرورگرها. در این لحظه فقط Microsoft edge این استاندارد را پیاده سازی کرده‌است.
‫۱۰ ماه قبل، چهارشنبه ۳ آبان ۱۴۰۲، ساعت ۱۰:۴۷
روش پیاده سازی Timeout در نگارش‌های جدیدتر #C
public static class TimeoutExtensions
{
     private static void ExecuteTimeoutCommon(Task actionTask, TimeSpan maxDelay)
     {
         var delayTask = Task.Delay(maxDelay);
         var finishedTaskIndex = Task.WaitAny(actionTask, delayTask);
         if (finishedTaskIndex != 0)
         {
             throw new TimeoutException("Action did not finish in the desired time slot.");
         }
     }

     public static void ExecuteTimeout<T>(Func<T> func, TimeSpan maxDelay)
     {
         var executionTask = Task.Run(() =>
         {
             func();
         });
         ExecuteTimeoutCommon(executionTask, maxDelay);
     }

     public static void ExecuteTimeout(Action action, TimeSpan maxDelay)
     {
         var executionTask = Task.Run(() =>
         {
             action();
         });
         ExecuteTimeoutCommon(executionTask, maxDelay);
     }
}
با این مثال:
TimeoutExtensions.ExecuteTimeout(Console.ReadLine, TimeSpan.FromSeconds(3));
‫۱۱ ماه قبل، چهارشنبه ۱۹ مهر ۱۴۰۲، ساعت ۲۲:۰۱
- بسته به اینکه context را چگونه مدیریت می‌کنید، می‌توانند باشند یا خیر. اگر برای مثال از متد ExecuteTransactionAsync استفاده می‌کنید، بله، هستند و اگر SaveChanges آن در تراکنش دیگری اجرا می‌شود، مدیریت استثناءهای آن‌را باید خودتان انجام دهید. برای مثال یک flag را در جائی برای اطلاع از وقوع استثناء ثبت و بررسی کنید.
- البته اگر من امروز بخواهم این راه‌حل را بازنویسی کنم، از یک SaveChangesInterceptor استفاده می‌کنم و نه از روش override کردن متد SaveChanges.