2016-11-06 43 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的合作沒有取消。

相關問題