一般來說,直接調用一個async Task的異步方法會出現波浪線(提示在方法前面加await的warning)。
class Program
{
private static async Task doSomethingAsync()
{
await Task.Run(()=>{
// 做一些耗時的事情.
});
}
static void Main()
{
doSomethingAsync(); // 這裏會出現波浪線,提示需要awiat
}
}
但是如果在doSomethingAsync()異步方法前面增加awiat關鍵字,則更加嚴重,提示出錯,提示需要在Main()方法之前添加async,搞得有點煩人。
那如何纔可以不出現warning提示,又保持async Task異步方法的簽名和Main()方法簽名不做任何改變?
方法是有的,這個方法就是額外再申明一個Task的delegate:
delegate Task funcasync();
然後,定義一個funcasync的委託變量,用這個委託變量去調用async Task函數:
static void Main()
{
funcasync MyAsync = doSomethingAsync;
NyAsync(); // 這裏不再出現波浪線. 一切OK。
}
這個時候func()不會出現波浪線,調用也仍然是異步方式調用,沒任何問題。