一般来说,直接调用一个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()不会出现波浪线,调用也仍然是异步方式调用,没任何问题。