در برنامههای Blazor Server، تنها از یک نخ رابط کاربری واحد ( single UI thread ) استفاده نمیشود؛ بلکه هر نخی که در دسترس باشد، میتواند در موقع رندر، استفاده شود. علاوه بر این اگر از عملیات نامتقارن استفاده شود، زمانیکه به کلمهی کلیدی await میرسیم، آنگاه نخ اختصاص داده شدهی برای ادامه پردازش متد، ممکن است لزوما همان چیزی نباشد که آن را شروع کرده است. برای نشان دادن این موضوع مثالی را در پیش میگیریم.
کامپوننتی را با نام Sync ...
زمانیکه تصمیم میگیریم کدهای زده شده را بهینه کنیم، اکثرا دنبال
راه حلهای جدید نمیگردیم. این مورد کاملا
غریزی است؛ چرا که بهدنبال کمترین انرژی و بیشترین بازدهی هستیم؛ این طبیعت انسان
است. صرفا کدهای قبلی را بازبینی میکنیم و سعی میکنیم نحوهی نوشتن منطقهای موجود را بهینه کنیم. در
همین راستا درک عملکرد Task و ValueTask ها شاید قدمی مهم در مورد بهینه کردن کدها باشد؛ چرا استفاده درست
...
عموما زمانیکه میخواهیم تمام وظایف مدنظر، به صورت موازی اجرا شوند، آنها را Task.WhenAll میکنیم . برای مثال 10 هزار درخواست HTTP را به صورت وظایفی، WhenAll میکنیم و ... در این حالت ... سرور ریموت، IP شما را خواهد بست! چون کنترلی بر روی تعداد وظیفهی در حالت اجرای موازی وجود ندارد و یک چنین عملی، شبیه به یک حملهی DDOS عمل میکند! برای مدیریت بهتر یک چنین مواردی، در دات نت 6 متدهای Parallel.ForEachAsync ارائه شدهاند تا دیگر نیازی به است ...
در قسمت قبل دیدیم که انجام کارهای همزمان، با Objectهایی که به اصطلاح Thread Safe نیستند (مانند DbContext) خروجی چندان جالبی ندارد و برای مثال اگر در یک Service یک DbContext را Inject کنیم (مثلا با Constructor injection) و از آن در متدی استفاده کنیم که آن متد یا با TPL یا RX و ... به صورت چندتایی و همزمان اجرا شود، DbContext به مشکل میخورد ؛ یعنی نمیتوان یک وهله از DbContext را بین چند Thread همزمان پردازش موازی، به اشتراک گذاشت. ...
آیا تا به حال لیستی از دیتا داشتهاید که بخواهید بر روی آنها کاری را انجام دهید؟ مثلا لیستی از مشتریان که باید برای تک تک آنها Pdf ای را بسازید، یا لیستی از مشتریان که باید برای تک تک آنها بیمه نامه صادر کنید، یا مثلا لیست اطلاعات بلیطهای قابل فروش را گرفتهاید و برای تک تک آنها میخواهید کمیسیون حساب کنید و ... در اکثر مواقعی کاری که برای تک تک آیتمها قرار است انجام شود، ساده است و با استفاده از یک حلقه foreach کار تمام میشود. ...
پس از فعالسازی C# 7.1 ، اولین ویژگی جدید C# 7.1، متدهای Main برنامههای کنسول (و همچنین WPF و WinForms) هستند که اینبار قابلیت تعریف async را نیز دارند.
نحوهی کار با متدهای async، در متدهای Main نگارشهای پیش از C# 7.1
برای کار با متدهای Async نیاز است از واژهی کلیدی await استفاده شود و با قید این واژه، ضروری است واژهی کلیدی async نیز به امضای متد دربرگیرندهی عملیات اضافه گردد؛ اما در نگارشهای پیشین زبان #C ...
جاوا اسکریپت به صورت single-thread عمل میکند. به این معنا که دو اسکریپت نمیتوانند به صورت همزمان اجرا شوند و باید یکی پس از دیگری اجرا شوند. سادهترین شکل برنامهنویسی غیرهمزمان در جاوا اسکریپت استفاده از callback میباشد. به عنوان مثال در سناریوی زیر Caller یکسری عملیات غیرهمزمان را مانند یک فراخوانی XHR و یا یک تایمر، انجام میدهد. زمانیکه Caller عملیات غیرهمزمانی را آغاز کرد، یک callback را به آن ارسال خواهد کرد و بعد از مطمئن شدن از ...
امروزه در برنامههای تحت وب، بارگذاری فایلهای جاوااسکریپت صفحات، یکی از چالشهای بزرگ در عملکرد، کارآیی و سرعت اجرای صفحات وب به شمار میآید. حال اینکه توسعه اپلیکیشنهای single page و استفاده از کتابخانههای حجیم جاوااسکریپتی، حجم این سری فایلها را بیشتر و بیشتر نیز میکند. در شرایطی خاص، تگ script باعث میشود که مرورگر برای مدت زمانی متوقف شود و فایلهای جاوااسکریپت را بارگذاری و اجرا نماید. در این مواقع مرورگر از انجام عملیات دیگ ...
در قسمت قبل توضیحاتی راجع به مقدمات Actor Based Programming و کاربرد آن داده شد و چند framework نیز برای توسعه به این روش معرفی گردید. در این قسمت جزئیات بیشتری را از این روش توسعه، ارائه خواهیم داد. خط تولید کارخانهای را فرض کنید که در آن یک قطعه از ابتدای خط حرکت نموده و کارگران مستقر در خط تولید نیز هر کدام بنا به وظیفهی خود، کاری را بر روی قطعهی مورد نظر انجام میدهند؛ به طوریکه در انتهای خط تولید، آن قطعهی اولیه، به یک محصول ...
مقدمه : زمانیکه هدفمان تولید سامانهی نرم افزاری باشد که تعداد بسیار زیادی از کاربران با آن سرو کار دارند و اتفاقاً این سامانه قرار است عملیات بسیار حساسی (نظیر عملیات بانکی و مالی، مخابراتی و ...) را انجام دهد و عدم سرویس دهی مناسب آن قابل تحمل نبوده و باعث خسارات مالی، نارضایتی و ... گردد میبایست از روشهای خاصی برای توسعهی این گونه سیستمها استفاده نمود. این نرم افزارها برای اینکه بتوانند به تعداد درخواستهای بسیار زیاد همزمان پا ...