我有一个场景,在我的。NET标准项目中,我有一个api
public async Task SendMessageAsync(){
await _service1.SendmessageToRestServiceAsync(); - calls a rest service
await _service2.SendMessageToKafkaAsync(); - calls a kakfaclient
}
SDK用户同时使用此服务100,1000次,并报告性能问题。
var tasks = Enumerable.Range(1, 100).Select(i =>SendMessageAsync());
await Task.WhenAll(tasks);
我希望运行
因为此调用始终是强制性的,不应受到影响。对await_service1.sendmessage()发出的所有并发请求;应在后台线程或其他线程上运行,以便性能不受影响。
我确实检查了ThreadPool.QueueWorkItem,它接受一个委托,但返回类型为void。
有没有一种方法运行所有对await_service1.sendmessage()的调用;在一个背景下,执行的顺序并不重要。
链接中的文档显示“创建一个任务,该任务将在所有提供的任务完成后完成”。已在WhenAll内部调用SendMessageAsync。我的问题是有没有一种方法,对SendmessageToRestServiceAsync的调用可以独立于其他task@peterduniho
为什么不使用
public async Task SendMessageAsync()
{
await Task.WhenAll(_service1.Sendmessage(), _servic2.Sendmessage());
}
对WhenAllIEnumerable)方法的调用不会阻止调用线程。
(https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.task.WhenAll?view=netcore-3.1)