我已经创建了自定义委托处理程序并覆盖了它的方法
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,还是更好地保持原样。
发布于 2016-11-06 22:58:56
Processor.Process每秒运行的频率是多少?如果不经常,那么做什么都无关紧要,你可以选择最方便的形式。
在最坏的情况下,它可以每60ms运行一次,并且可以同时接收16个请求
那不算什么。我就不会担心了。此外,由于您没有可用的异步API,因此您可以做的事情也不多。
选择了最方便的形式。我喜欢这个:
return Task.FromResult(Processor.Process(request));取消令牌在这里没有任何作用,所以就省略它吧。没有Processor的合作就不能取消。
https://stackoverflow.com/questions/40447330
复制相似问题