提问者:小点点

如何在不同的线程中运行两个不同的异步方法C#[重复]


我有一个场景,在我的。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


共1个答案

匿名用户

为什么不使用?设置两个单独的来运行,并设置来运行它们。

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)