2016-11-06 44 views
1

我已创建自定义的委托处理程序,并重写它的方法SelfHost DelegatingHandler

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); 
    } 

我应该使用异步等待还是最好离开它。

+0

Processor.Process每秒运行多少次?如果不经常,那么无论你做什么,你都可以选择最方便的形式。 – usr

+0

在最坏的情况下它可以每60毫秒运行一次,它可以同时接收16个请求 –

回答

0

Processor.Process每秒运行多少次?如果不经常,那么无论你做什么,你都可以选择最方便的形式。

在最坏的情况下也可以运行每60ms的,它可以在同一时间

这没什么收到16个请求。我会无动于衷。另外,由于您没有可用的异步API,因此您可以做的事情不多。

选择最方便的形式。我喜欢这一个:

return Task.FromResult(Processor.Process(request)); 

取消令牌在这里没有任何作用,所以只是把它放在外面。没有Processor的合作没有取消。

相关问题