我正在尝试为一组任务实现信号量 slim,这些任务旨在向外部 API 请求一些数据。数据可能有不同的格式,因此计划返回 HttpResponseMessage,以便转换器(json 转换器)将处理它。 但是,我在退货时收到上述错误,但我不知道该怎么办:
tasks.Add(
Task<HttpResponseMessage>.Run(() =>
{
semaphoreSlim.WaitAsync();
try{
return (SetupRequestAsync(request, HttpMethod.Get));
}
catch (Exception ex) { throw ex; }
finally { semaphoreSlim.Release(); }
}, cancelTok
));
cancelTok 是一个取消令牌,一旦我们通过 SetupRequestAsync 从服务器获得有效结果(意味着返回 HttpResponseMessage),就会停止创建线程。
您需要先创建 lambda
async
,然后await
在其中进行调用。不要吞下并重新抛出异常,它所做的只是擦除堆栈跟踪。
而且看起来信号量处理应该在 lambda 之外。
try
{
await semaphoreSlim.WaitAsync(cancelTok);
var task = Task.Run(async () =>
{
return await SetupRequestAsync(request, HttpMethod.Get);
}, cancelTok);
tasks.Add(task);
}
finally
{
semaphoreSlim.Release();
}