مزایای استفاده از WhenAll برای await Task در سی شارپ

قبل از توضیح مزایای استفاده از WhenAll برای await Task در سی شارپ می بایست سناریویی را شرح دهیم تا بر مبنای آن بتوانیم موضوع استفاده از WhenAll برای await Task.

انتشار: , زمان مطالعه: 5 دقیقه
مزایای استفاده از WhenAll برای await Task در سی شارپ
دسته بندی: برنامه نویسی تعداد بازدید: 259

استفاده از 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); عبارت‌اند از:

  1. همزمانی: با استفاده از Task.WhenAll, شما می‌توانید چندین Task را به صورت همزمان اجرا کنید و منتظر بمانید تا همه آن‌ها به اتمام برسند. این به خصوص مفید است وقتی شما نیاز دارید تا چندین عملیات غیر همزمان را هم‌زمان اجرا کرده و سپس به اتمام آن‌ها واکنش نشان دهید.

  2. کارایی: در مواردی که چندین Task بدون وابستگی به یکدیگر وجود دارد، اجرای همزمان آن‌ها با استفاده از Task.WhenAll می‌تواند کارایی سیستم را افزایش دهد.

  3. سادگی در کد: استفاده از Task.WhenAll می‌تواند کد شما را ساده‌تر و خواناتر کند. به جای استفاده از چند await جداگانه برای هر Task, شما می‌توانید تمام Task‌ها را در یک لیست قرار دهید و با یک await منتظر اتمام همه آن‌ها بمانید.

  4. دسترسی به خطاها: اگر یکی یا چند 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
    }
}

دیدگاه های مربوط به این مقاله (برای ارسال دیدگاه در سایت حتما باید عضو باشید و پروفایل کاربری شما تکمیل شده باشد)