در مطالب قبلی نحوه ایجاد برنامه بصورت Asynchronous را با استفاده از backgroundworker در این قسمت برای شما کاربران فکر بکر قرار دادیم.
در این مثال به مجموع دو آرایه دوبعدی با استفاده از ایجاد ترد از طریق async و await خواهیم پرداخت.
استفاده از کلمه async به معنای آغاز کار در یک ترد جدید میباشد. بنابراین طبق مراحل زیر کار را دنبال خواهیم کرد.
یک برنامه ویندوزی ایجاد نمایید و درون فرم یک دکمه و یک لیبل جهت نمایش مراحل کار قرار دهید.
سه آرایه بصورت زیر ایجاد میکنیم . دو آرایه اول جهت انجام عملیات جمع مورد استفاده قرار خواهند گرفت و نتیجه محاسبات در آرایه سوم قرار میگیرد.
int[,] ar1 = new int[2, 2];
int[,] ar2 = new int[2, 2];
int[,] ar3 = new int[2, 2];
برای اینکه رویداد کلیک دکمه که بر ای مجموع دو آرایه مورد استفاده قرار میگیرد بصورت یک ترد جدا اجرا گردد رویداد کلیک آنرا بصورت زیر مینویسیم.لطفا به کلمه async در بدنه این تابع دقت نمایید.
private async void btnSum_Click(object sender, EventArgs e)
{
ar1[0, 0] = 1;
ar1[0, 1] = 2;
ar1[1, 0] = 3;
ar1[1, 1] = 4;
ar2[0, 0] = 5;
ar2[0, 1] = 6;
ar2[1, 0] = 7;
ar2[1, 1] = 8;
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
ar3[i, j] = await SumAsync(ar1[i, j], ar2[i, j]);
label2.Text += await SumAsync(ar1[i, j], ar2[i, j]) + Environment.NewLine;
}
}
}
در قطعه کد فوق برای محاسبه مجموع دو عدد از تابع SumAsync که بصورت یک ترد اجرا میشود استفاده کردیم . در این نوع از توابع استفاده از کلمه Task ضروری میباشد چرا که یک فرایند با ترد منحصر بفرد میباشد و نوع بر گشتی آن نیز int میباشد.و در پایان برای فراخوانی این تابع از کلمه await استفاده شده است .این بدان معنی میباشد که زمان پایان پروسه برای ما چندان مهم نیست و برنامه در یک ترد جدا اجرا میشود و در نهایت نتیجه خروجی آن دریافت میشود.
public async Task<int> SumAsync(int a, int b)
{
return await Task.Run(() =>
{
Thread.Sleep(5000);
// label2.Text += (a.ToString() + " + " + b.ToString() + " = " + (a + b)) + Environment.NewLine;
return (a + b);
});
}
در تابع فوق در صورتی که بخواهید به کنترلهای موجود در فرم دسرسی داشته باشید باید قطعه کد return await Task.Run(() => را از بدنه تابع حذف نمایید.
اکنون میتوانید برنامه را اجرا نمایید .
بعد ار کلیک دکمه شما به راحتی میتوانید رویدادهای دیگری از کنترلهای فرم را نیز اجرا کنید.