SelfHost DelegatingHandler

时间:2016-11-06 08:24:36

标签: c# deadlock 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);
    }

我应该使用async await还是最好保持原样。

1 个答案:

答案 0 :(得分:0)

每秒Processor.Process的运行频率是多少?如果不经常,那么你做什么并不重要,你可以选择最方便的形式。

  

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

那没什么。我不关心。此外,由于您没有可用的异步API,因此您无能为力。

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

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

取消令牌在这里没有任何效果,所以请将其删除。没有Processor的合作,就没有取消。