我正在尝试用异步CTP弄脏手,我注意到编译器抱怨异步返回类型.其他类型有什么问题?
一个简单的演示
static void Main(string[] args)
{
DoWork();
Console.WriteLine("Returned to main");
Console.Read();
}
// why do I need to return void, Task or Task<T> here?
// I know I can use something like Task<IEnumerable<string>>
private static async string[] DoWork()
{
Console.WriteLine("DoWork started");
return await Task.Factory.StartNew(
delegate
{
Thread.Sleep(2000);
Console.WriteLine("DoWork done");
return new List<string>();
});
}
Run Code Online (Sandbox Code Playgroud) 我的要求很奇怪.
我有SomeMethod()
哪些电话GetDataFor()
.
public void SomeMethod()
{
for(int i = 0; i<100; i++) {
var data = GetDataFor(i);
}
}
public data GetDataFor(int i) {
//call a remote API
//to generate data for i
//store to database
return data;
}
Run Code Online (Sandbox Code Playgroud)
对于每一个i
,最终结果总是不同的.有没有需要等待的GetDataFor(i)
调用之前完成GetDataFor(i+1)
.
换句话说,我需要:
GetDataFor()
每个i+1
立即成功后调用i
(并行调用它们看起来不可能的)GetDataFor()
都完成运行SomeMethod()
按照YK1的回答,我试图像这样修改它:
public async Task<void> SomeMethod()
{
for(int i …
Run Code Online (Sandbox Code Playgroud)