在 MVA 视频之一中,我看到了下一个构造:
static void Main(string[] args)
{
Action testAction = async () =>
{
Console.WriteLine("In");
await Task.Delay(100);
Console.WriteLine("After first delay");
await Task.Delay(100);
Console.WriteLine("After second delay");
};
testAction.Invoke();
}
执行结果将是:
In
Press any key to continue . . .
它完美编译,但现在我看不到任何等待它的方法。我可能会放Thread.Sleep
or Console.ReadKey
调用后,但这不是我想要的。
那么应该如何修改这个委托以使其变为可等待状态?(或者至少我如何跟踪执行完成?)
这样的代表有什么实际用途吗?
为了等待某件事,它必须是等待的. As void
不是这样,你不能等待任何Action
代表。
可等待是任何实现了GetAwaiter
方法,它返回一个实现以下任一方法的类型INotifyCompletion
or ICriticalNotifyCompletion
, like Task
and Task<T>
, 例如。
如果您想等待委托,请使用Func<Task>
,这相当于具有以下签名的命名方法:
public Task Func()
因此,为了等待,请将您的方法更改为:
static void Main(string[] args)
{
Func<Task> testFunc = async () =>
{
Console.WriteLine("In");
await Task.Delay(100);
Console.WriteLine("First delay");
await Task.Delay(100);
Console.WriteLine("Second delay");
};
}
现在你可以等待了:
await testFunc();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)