יתרונות חסרונות
יתרון - אתה משחרר את ה thread במקום לתקוע אותו על IO, עם תיכנון נכון וטוב אתה יכול להגיד את ה throughput של הקוד שלך
חיסרון - סכנה לdeadlocks, סכנה לresource exhaustion אם אתה לא יודע מה אתה עושה...
בעיה של דליפת זיכרון... הכל תלוי בקוד שלך חביבי, תכתוב קוד לא טוב, ידלוף.
מתי עדיף? מתי שאתה יודע שכל הcall stack שלך יכול להתנהג בצורה הזאת, אחרת
קשה מאוד לכתוב קוד סינכרוני בתוך קוד אסינכרוני.
כל מה מה שאמרתי כיתרון, אפשר כהרף עין להפוך לחיסרון כשעובדים לא נכון, וכל דבר שאמרתי שקשה הופך לקל ברגע שאתה יודע מה אתה עושה.
אני חושב שהדבר הכי חשוב לקחת מהתגובה: לפני שאתה נכנס ל TPL בכללי ולasync/await Tasks בפרט - כדאי מאוד לדעת מה אתה עושה ולהבין את הנושא.