相关疑难解决方法(0)

为什么返回异步类型必须为void,Task或Task <T>

我正在尝试用异步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)

.net async-await c#-5.0

13
推荐指数
2
解决办法
8233
查看次数

异步运行同一方法的多个实例?

我的要求很奇怪.

我有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(并行调用它们看起来不可能的)
  • 等到所有 100个实例GetDataFor()都完成运行
  • 离开范围 SomeMethod()

按照YK1的回答,我试图像这样修改它:

public async Task<void> SomeMethod()
{
    for(int i …
Run Code Online (Sandbox Code Playgroud)

c# performance asynchronous task async-await

3
推荐指数
1
解决办法
6823
查看次数

标签 统计

async-await ×2

.net ×1

asynchronous ×1

c# ×1

c#-5.0 ×1

performance ×1

task ×1