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.
012を避けるために、私はより良い使い方を教えて訂正しません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を使用するか、そのまま残す方が良いです。
「Processor.Process」は1秒あたりどのくらいの頻度で実行されますか?頻繁ではない場合は、あなたが何をしているかは関係ありませんし、最も便利なフォームを選ぶことができます。 – usr
最悪のシナリオでは、60msごとに実行でき、同時に16の要求を受信できます –