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

问题描述

在我的.Net Standard项目中,我有一个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(); 这样,即使有异常也不应停止 await _service2.SendMessage();

由于此呼叫始终是强制性的,因此不应受到影响。 _service1.Sendmessage();等待的所有并发请求;应该在后台线程或其他线程上运行,以免影响性能

我确实检查了接受委托的ThreadPool.QueueWorkItem,但返回类型为空。

是否有一种方法可以运行所有调用以等待_service1.Sendmessage();在后台运行。执行顺序并不重要。

链接中的文档显示“创建一个任务,该任务将在所有提供的任务完成时完成。” 在所有时间内已经调用了SendMessageAsync。 我的问题是有办法,对SendmessagetoRestServiceAsync的调用可以独立于其他任务@PeterDuniho –

解决方法

为什么不使用await Task.WhenAll?设置两个单独的Tasks来运行,然后await都运行。

public async Task SendMessageAsync()
{
   await Task.WhenAll(_service1.Sendmessage(),_servic2.Sendmessage());
}

对WhenAll(IEnumerable)方法的调用不会阻止 调用线程。

https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.task.whenall?view=netcore-3.1