【发布时间】:2015-05-10 17:50:15
【问题描述】:
请考虑以下代码:
public async Task<string> GetString()
{
//Some code here...
var data = await A();
//Some more code...
return data;
}
private async Task<string> A()
{
//Some code here..
var data = await B();
//manipulating data...
return data;
}
private async Task<string> B()
{
//Some code here..
var data = await C();
//manipulating data...
return data;
}
private async Task<string> C()
{
//Some code here..
var data = await FetchFromDB();
//manipulating data...
return data;
}
private async Task<string> FetchFromDB()
{
return await SOME_HTTP_REQUEST;
}
这段代码演示了一个最基本的功能——嵌套异步方法。 每种方法都会转化为状态机吗?或者编译器是否足够复杂以生成更有效的结构? 在我的一些项目中,UI/WebAPI 和 I/O 调用之间有大约 20 种方法 - 这会影响异步等待开销(例如状态机)和非阻塞线程优势之间的权衡吗? 我的意思是,例如,如果 4 个状态机(4 个嵌套异步方法)的开销等于 50 毫秒的阻塞 I/O(就权衡而言),那么 20 个状态机是否等于更长的 I/O 延迟( 250 毫秒)?
【问题讨论】:
标签: c# asp.net async-await clr