مزایای استفاده از WhenAll برای await Task در سی شارپ
قبل از توضیح مزایای استفاده از WhenAll برای await Task در سی شارپ می بایست سناریویی را شرح دهیم تا بر مبنای آن بتوانیم موضوع استفاده از WhenAll برای await Task.
استفاده از WhenAll برای await Task در سی شارپ
قبل از توضیح مزایای استفاده از WhenAll برای await Task در سی شارپ می بایست سناریویی را شرح دهیم تا بر مبنای آن بتوانیم موضوع استفاده از WhenAll برای await Task در سی شارپ را بهتر مورد بررسی قرار دهیم . فرض کنید شما با لاروال API را طراحی کرده اید که به سیستم های درون شبکه دستوراتی طرح ریزی می کند و سیستم ها با ارسال درخواست هر 5 ثانیه از دستورات مطلع می شوند . حالا باید دستوراتی که از سرور لاراول شما دریافت می شود توسط نرم افزار ویندوزی شما به صورت همزمان آغاز به کار کند . برای منتظر ماندن و کنترل خطا ها و موارد مورد نیاز پردازش موازی شما باید از Task.WhenAll استفاده کنید . در قطعه کد زیر سناریوی زیر به صورت خیلی ساده مثال زده شده است .
using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.Collections.Generic;
class Program
{
private static readonly HttpClient client = new HttpClient();
static async Task Main(string[] args)
{
while (true)
{
var response = await client.GetStringAsync("http://your-laravel-api-url/api/tasks");
List<Task> tasks = new List<Task>();
if (response.Contains("shutdown"))
{
tasks.Add(Task.Run(() => ShutdownSystem()));
}
else if (response.Contains("ping"))
{
tasks.Add(Task.Run(() => GooglePing()));
}
if (tasks.Count > 0)
{
await Task.WhenAll(tasks);
}
await Task.Delay(5000);
}
}
static void ShutdownSystem()
{
// Execution code to shut down the system
}
static void GooglePing()
{
// Execution code to ping Google or any other operation
}
}
مزایای استفاده از WhenAll برای await Task در سی شارپ
await Task.WhenAll(tasks); یک عملیات غیرهمزمان است که منتظر تمامی Taskهایی میماند که در لیست tasks قرار دارند تا به اتمام برسند.
فایدههای استفاده از await Task.WhenAll(tasks); عبارتاند از:
-
همزمانی: با استفاده از
Task.WhenAll, شما میتوانید چندینTaskرا به صورت همزمان اجرا کنید و منتظر بمانید تا همه آنها به اتمام برسند. این به خصوص مفید است وقتی شما نیاز دارید تا چندین عملیات غیر همزمان را همزمان اجرا کرده و سپس به اتمام آنها واکنش نشان دهید. -
کارایی: در مواردی که چندین
Taskبدون وابستگی به یکدیگر وجود دارد، اجرای همزمان آنها با استفاده ازTask.WhenAllمیتواند کارایی سیستم را افزایش دهد. -
سادگی در کد: استفاده از
Task.WhenAllمیتواند کد شما را سادهتر و خواناتر کند. به جای استفاده از چندawaitجداگانه برای هرTask, شما میتوانید تمامTaskها را در یک لیست قرار دهید و با یکawaitمنتظر اتمام همه آنها بمانید. -
دسترسی به خطاها: اگر یکی یا چند
Taskبه دلیل یک خطا شکست خوردند،Task.WhenAllیکAggregateExceptionپرتاب میکند که حاوی تمامی خطاها است. این به شما امکان میدهد تا به تمامی خطاها در یک محل واکنش نشان دهید.
در کل، await Task.WhenAll(tasks); یک روش کارآمد و مناسب برای اجرای همزمان و انتظار برای اتمام چند Task است.
استفاده از چند await جداگانه برای هر Task
اگر می خواهید به جای استفاده از await Task.WhenAll(tasks); استفاده از چند await جداگانه برای هر Task را اجرایی کنید خیلی ساده از کد زیر بهرهمند شوید .
using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.Collections.Generic;
class Program
{
private static readonly HttpClient client = new HttpClient();
static async Task Main(string[] args)
{
while (true)
{
var response = await client.GetStringAsync("http://your-laravel-api-url/api/tasks");
if (response.Contains("shutdown"))
{
await Task.Run(() => ShutdownSystem());
}
else if (response.Contains("ping"))
{
await Task.Run(() => GooglePing());
}
await Task.Delay(5000);
}
}
static void ShutdownSystem()
{
// Execution code to shut down the system
}
static void GooglePing()
{
// Execution code to ping Google or any other operation
}
}
دیدگاه های مربوط به این مقاله (برای ارسال دیدگاه در سایت حتما باید عضو باشید و پروفایل کاربری شما تکمیل شده باشد)