مزایای استفاده از 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
}
}
دیدگاه های مربوط به این مقاله (برای ارسال دیدگاه در سایت حتما باید عضو باشید و پروفایل کاربری شما تکمیل شده باشد)