首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SelfHost DelegatingHandler

SelfHost DelegatingHandler
EN

Stack Overflow用户
提问于 2016-11-06 16:24:36
回答 1查看 52关注 0票数 1

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

代码语言:javascript
复制
Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)

现在在这个方法中,我运行了自定义的同步方法,你们能让我知道这个例子中哪一个是正确的吗,或者如果两个都不正确,让我知道更好的用法,以避免任何死锁

1.

代码语言:javascript
复制
 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.

代码语言:javascript
复制
 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,还是更好地保持原样。

EN

回答 1

Stack Overflow用户

发布于 2016-11-06 22:58:56

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

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

那不算什么。我就不会担心了。此外,由于您没有可用的异步API,因此您可以做的事情也不多。

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

代码语言:javascript
复制
return Task.FromResult(Processor.Process(request));

取消令牌在这里没有任何作用,所以就省略它吧。没有Processor的合作就不能取消。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40447330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档