异步作为方法结果管理器?
async as a method result manager?
The “async”
keyword enables the “await” keyword in that method and
changes how method results are handled. That’s all the async keyword
does!
第二部分让我很感兴趣,但我没有在文章中找到对此的解释。
做一点测试(注意 - 这里没有等待的任务):
static void X()
{
try
{
Y();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
static async void Y() //<---- notice here
{
throw new NotImplementedException();
}
static void Main(string[] args)
{
X();
Console.ReadLine();
}
这将终止程序:
同时 从中删除 async
:
static async void Y()
{
throw new NotImplementedException();
}
将产生:
MSDN 什么也没说:
If the method that the async keyword modifies doesn't contain an await
expression or statement, the method executes synchronously. A compiler
warning alerts you to any async methods that don't contain await,
because that situation might indicate an error
问题
如果是这样,else 这个词 async
会导致我的代码产生不同的结果吗?
async
方法捕获所有异常,不将它们向上抛出堆栈给方法的调用者,而是将它们包含在方法返回的 Task
中,将其标记为故障 Task
。如果该方法是 async void
,则在应用程序级别抛出错误,如您所见,因为无法通过 Task
.
观察异常
The
“async”
keyword enables the “await” keyword in that method and changes how method results are handled. That’s all the async keyword does!
第二部分让我很感兴趣,但我没有在文章中找到对此的解释。
做一点测试(注意 - 这里没有等待的任务):
static void X()
{
try
{
Y();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
static async void Y() //<---- notice here
{
throw new NotImplementedException();
}
static void Main(string[] args)
{
X();
Console.ReadLine();
}
这将终止程序:
同时 从中删除 async
:
static async void Y()
{
throw new NotImplementedException();
}
将产生:
MSDN 什么也没说:
If the method that the async keyword modifies doesn't contain an await expression or statement, the method executes synchronously. A compiler warning alerts you to any async methods that don't contain await, because that situation might indicate an error
问题
如果是这样,else 这个词 async
会导致我的代码产生不同的结果吗?
async
方法捕获所有异常,不将它们向上抛出堆栈给方法的调用者,而是将它们包含在方法返回的 Task
中,将其标记为故障 Task
。如果该方法是 async void
,则在应用程序级别抛出错误,如您所见,因为无法通过 Task
.