درخواست های ارتباط
جستجو تنظیمات
لیست دوستان من
صندوق پیام
همه را دیدم تنظیمات
  • در حال دریافت لیست پیام ها
صندوق پیام
  • در حال دریافت لیست رویدادها
همه رویدادهای من

استفاده از متد WhenAll برای اجرای چندین Task به صورت همزمان در سی شارپ

0 نظرات
فرض کنید که داخل یک متد باید چندین متد را به صورت await فراخوانی کنید. به صورت عادی زمانی که متدها فراخوانی می شوند هر بخش await بعد از تکمیل await قبلی اجرا خواهد شد و مقادیر بازگشتی به صورت یکجا در اختیار شما قرار نمیگیرند. برای مثال، کد زیر را در نظر بگیرید:

private async void AsyncBtn_Click(object sender, EventArgs e)
{
    Result1TextBox.Text = (await Task1()).ToString();
    Result12extBox.Text = (await Task2()).ToString();
}

private Task<long> Task1()
{
    return Task.Run<long>(() =>
    {
        var num = Enumerable.Repeat(10, 1000);
        long sum = 0;
        foreach (var item in num)
        {
            System.Threading.Thread.Sleep(2);
            sum += item;
        }
        return sum;
    });
}
private Task<long> Task2()
{
    return Task.Run<long>(() =>
    {
        var num = Enumerable.Repeat(10, 1000);
        long sum = 0;
        foreach (var item in num)
        {
            System.Threading.Thread.Sleep(2);
            sum += item;
        }
        return sum;
    });
}

در کد بالا، ابتدا عملیات Task1 انجام شده و نتیجه نمایش داده می شود و پس از آن Task2 اجرا شده و نتیجه نمایش داده می شود. برای رفع وقفه بین اجرای دو Task از متد WhenAll استفاده می کنیم. برای استفاده از متد WhenAll کد BtnAsync_Click را به صورت زیر تغییر می دهیم:

private async void AsyncBtn_Click(object sender, EventArgs e)
{
    var results = await Task.WhenAll(Task1(), Task2());
    txtBox.Text = results[0].ToString();
    txtSecond.Text = results[1].ToString();
}

با ایجاد تغییر کد بالا، خروجی متد WhenAll یک آرایه از نوع long خواهد بود که هر یک از اندیس های آرایه به ترتیب خروجی متدهای اول و دوم می باشد و به صورت بالا می توان خروجی ها را در TextBox ها نمایش داد.

نویسنده: حسین احمدی
منبع: ITpro
برچسب ها
ردیف عنوان قیمت
1 کار با Thread ها در زبان سی شارپ :: آشنایی با Process ها، Thread ها و AppDomain ها رایگان
2 کار با Thread ها در زبان سی شارپ :: آشنایی با ماهیت Asynchronous در Delegate ها رایگان
3 کار با Thread ها در زبان سی شارپ :: آشنایی با فضای نام System.Threading و کلاس Thread رایگان
4 کار با Thread ها در زبان سی شارپ :: آشنایی با Thread های Foreground و Background در دات نت رایگان
5 کار با Thread ها در زبان سی شارپ :: آشنایی با مشکل Concurrency در برنامه های Multi-Threaded و راهکار های رفع این مشکل رایگان
6 کار با Thread ها در زبان سی شارپ :: آشنایی با کلاس Timer رایگان
7 کار با Thread ها در زبان سی شارپ :: آشنایی با CLR ThreadPool در دات نت رایگان
8 برنامه نویسی Parallel در سی شارپ :: مقدمه ای بر Task Parallel Library و کلاس Parallel در دات نت رایگان
9 برنامه نویسی Parallel در سی شارپ :: آشنایی با کلاس Task در سی شارپ رایگان
10 برنامه نویسی Parallel در سی شارپ :: متوقف کردن Task ها در سی شارپ - کلاس CancellationToken رایگان
11 برنامه نویسی Parallel در سی شارپ :: کوئری های Parallel در LINQ رایگان
12 آشنایی با کلمات کلیدی async و await در زبان سی شارپ رایگان
13 استفاده از متد WhenAll برای اجرای چندین Task به صورت همزمان در سی شارپ رایگان
مطالب مرتبط
نظرات
هیچ نظری ارسال نشده است

    برای ارسال نظر ابتدا به سایت وارد شوید

    arrow