در برنامه نویسی Asynchronous در سی شارپ، برای نوشتن کدهایی با پرفرمنس بهتر، روش هایی وجود دارد. یکی از این روش ها استفاده از Task.WhenAll است.
اما کجا می توانیم از آن استفاده می کنیم؟
در این مقاله به این موضوع می پردازیم و شرایطی را بررسی می کنیم که استفاده از Task.WhenAll این امکان را به ما می دهد که کد با پرفرمنس بهتری بنویسیم.
شرایطی را در نظر بگیرید که ما کارهایی می خواهیم انجام دهیم که این کارها بصورت متوالی و پشت سرهم نیستند.
برای مثال در کد پایین ما چندین تسک مستقل داریم که می خواهیم یک فایل لاگ را ایجاد کنیم. این کار را با دو روش انجام می دهیم.
در روش اول به شکل زیر در یک حلقه هزارتایی، متد CreateNewLogAsync را فراخوانی می کنیم
در روش دوم از Task.WhenAll به شکل زیر استفاده می کنیم:
با مقایسه دو کد بالا متوجه می شویم که زمان اجرا روش دوم خیلی کمتر از روش اول است و پرفرمنس به مراتب بالاتری دارد.
دلیل این امر این است که در روش اول کارها بصورت متوالی و پشت سرهم اجرا می شوند اما در روش دوم با استفاده از Task.WhenAll کارها بصورت موازی(parallel) انجام می گیرند.
نتیجه اینکه اگر چندین متد مستقل asynchronous در کد شما وجود دارد به طوری که هرکدام باید منتظر تکمیل متد قبلی باشد، به این نکته توجه کنید که می توانید با استفاده از Task.WhenAll کد بهتری بنویسید.
در پایین می توانید کل کدهای این قسمت را ملاحظه کنید و پرفرمنس آنها را باهم مقایسه نمایید.