在C#中从getter或setter调用异步方法最优雅的方法是什么?
这里有一些伪代码可以帮助解释自己.
async Task<IEnumerable> MyAsyncMethod()
{
return await DoSomethingAsync();
}
public IEnumerable MyList
{
get
{
//call MyAsyncMethod() here
}
}
Run Code Online (Sandbox Code Playgroud) 我不太明白之间的差别Task.Wait和await.
我在ASP.NET WebAPI服务中有类似于以下函数:
public class TestController : ApiController
{
public static async Task<string> Foo()
{
await Task.Delay(1).ConfigureAwait(false);
return "";
}
public async static Task<string> Bar()
{
return await Foo();
}
public async static Task<string> Ros()
{
return await Bar();
}
// GET api/test
public IEnumerable<string> Get()
{
Task.WaitAll(Enumerable.Range(0, 10).Select(x => Ros()).ToArray());
return new string[] { "value1", "value2" }; // This will never execute
}
}
Run Code Online (Sandbox Code Playgroud)
哪里Get会僵局.
什么可能导致这个?当我使用阻塞等待而不是await Task.Delay?时,为什么这不会导致问题?