1

我创建了自定义委托处理程序并覆盖它的方法

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

我应该使用异步等待还是最好保持原样。

4

1 回答 1

0

Processor.Process 每秒运行的频率是多少?如果不经常,那么您做什么都没关系,您可以选择最方便的形式。

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

没什么。我会无所谓的。此外,由于您没有可用的异步 API,因此您无能为力。

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

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

取消令牌在此处没有任何作用,因此请忽略它。没有合作就没有取消Processor

于 2016-11-06T14:58:56.373 回答