快速触发任务方法

Trigger Task method rapidly

命令接收者:

public override async ValueTask Execute(){
    // my code here
    // this is boardcast command
    // attempt #1
    Parallel.ForEach(lists, async list => { await DoSomething(); });

    // attempt #2
    List<Task> tasks = new List<Task>();
    foreach(ulong id in ids) tasks.Add(DoSomething());
    await Task.WhenAll(tasks);
}

DoSomething():

public async Task DoSomething(){
    Task<abc> Request = API.RequestSomething();
    // attempt #1
    await Request.ContinueWith(Callback => {
        // Do something (long time...) , eg: update database, update all client data etc.
    });

    // attempt #2
    await Request.ContinueWith(Callback => {
        // .....
    }, TaskContinuationOptions.ExecuteSynchronously);
}

问题是:如果客户端快速向接收方发送命令(每秒大约 100 个命令),我该如何处理而没有(或低)延迟,或者我该如何制作我的任务函数 (Task DoSomeThing();) 运行 并行

我已经测试了我的代码,它工作正常。但如果有更好的方法,我希望得到您的建议。还是我遗漏了任何错误? (我没有用每秒多个命令测试它)。

正如其他人指出的那样,Parallel 不应与 async 方法一起使用,因此 Task.WhenAll 方法是异步并发的正确解决方案:

public override async ValueTask Execute() {
  var tasks = ids.Select(id => DoSomething()).ToList();
  await Task.WhenAll(tasks);
}

关于您的实施,do not use ContinueWith

public async Task DoSomething() {
  var Callback = await API.RequestSomething();
  // Do something (long time...) , eg: update database, update all client data etc.
}