我创建了自定义委托处理程序并覆盖了它的方法
Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
现在在该方法中我运行自定义同步方法,你们可以告诉我这些例子中哪一个是正确的,或者两者都不正确让我知道更好的用法,以避免任何死锁
1
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (Processor.CanProcess(request))
{
var tsc = new TaskCompletionSource<HttpResponseMessage>(cancellationToken);
tsc.SetResult(Processor.Process(request));
return tsc.Task;
}
return base.SendAsync(request, cancellationToken);
}
2
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (Processor.CanProcess(request))
return Task.Run(() => Processor.Process(request), cancellationToken);
return base.SendAsync(request, cancellationToken);
}
我应该使用async await还是最好保持原样。
答案 0 :(得分:0)
每秒Processor.Process的运行频率是多少?如果不经常,那么你做什么并不重要,你可以选择最方便的形式。
在最坏的情况下,它可以每60ms运行一次,并且可以同时接收16个请求
那没什么。我不关心。此外,由于您没有可用的异步API,因此您无能为力。
选择最方便的形式。我喜欢这个:
return Task.FromResult(Processor.Process(request));
取消令牌在这里没有任何效果,所以请将其删除。没有Processor
的合作,就没有取消。