【发布时间】:2016-11-06 22:58:56
【问题描述】:
我已经创建了自定义委托处理程序并覆盖了它的方法
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);
}
我应该使用异步等待还是最好保持原样。
【问题讨论】:
-
Processor.Process每秒运行的频率是多少?如果不经常,那么你做什么都没关系,你可以选择最方便的形式。 -
在最坏的情况下它可以每60ms运行一次,它可以同时接收16个请求
标签: c# deadlock delegatinghandler