dze*_*ras 3 c# asynchronous exception-handling
我开始使用.NET 4.5,特别是async/await功能.
我来到下面的代码,这令我惊讶,编译.谁能解释我的原因?
async Task SomeMethod()
{
try
{
await Task.Delay(1000);
}
catch
{
}
}
Run Code Online (Sandbox Code Playgroud)
对于以前的.NET版本,编译器会抱怨类似于以下消息:"并非所有路径都返回值".
返回的异步方法Task
等同于返回的普通方法void
.这里没有任何尝试/捕捉特定的东西 - 不要忘记你的try
块也没有返回任何东西!
因此,代码的非异步版本只是:
void SomeMethod()
{
try
{
Thread.Sleep(1000)
}
catch
{
}
}
Run Code Online (Sandbox Code Playgroud)
......显然那会编译.(同样显然,使用裸露是可怕的catch
,但我认为这不是真正的问题:)
此代码将无法编译:
async Task<int> SomeMethod()
{
try
{
await Task.Delay(1000);
return 10;
}
catch
{
}
}
Run Code Online (Sandbox Code Playgroud)