【发布时间】:2023-04-02 17:23:01
【问题描述】:
命令接收者:
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 个命令),我怎样才能在没有(或低)延迟的情况下处理这个问题,或者我怎样才能使我的任务功能(@ 987654325@) 并行运行
我已经测试了我的代码,它运行良好。但如果有更好的方法,我希望得到您的建议。还是我遗漏了什么错误? (我没有用每秒多个命令对其进行测试)。
【问题讨论】:
-
"我已经测试了我的代码,它运行良好。" - 在这种情况下,一切都是过早的优化。
-
请注意
Parallel.ForEachis not async friendly。还将ContinueWith与awaitis not a good idea 结合起来,因为这两种机制完成了同样的事情。使用其中一种,最好使用await。 -
我尝试了很多方法,直到我尝试了这个方法,它才有效,但我不知道是否还有其他情况会导致我的代码无法正常工作。但感谢大家的快速回复和建议。
标签: c# multithreading async-await parallel-processing task-parallel-library