gpt4 book ai didi

azure - Azure 服务总线中继是否支持异步 WCF 操作?

转载 作者:行者123 更新时间:2023-12-03 03:15:34 24 4
gpt4 key购买 nike

服务总线中继是否支持异步 WCF 操作?

我发现服务器无法使用以下代码返回有意义的响应。如果我将时间跨度更改为 30 秒,效果很好。

按照本教程开始 http://azure.microsoft.com/en-us/documentation/articles/service-bus-dotnet-how-to-use-relay

客户端代码:

var task = Task<string>.Factory.FromAsync(channel.BeginDoEcho, channel.EndDoEcho, input, null);
Console.WriteLine("Server echoed: {0}", task.Result );

服务器代码:

public IAsyncResult BeginDoEcho(string text, AsyncCallback callback, object state)
{
var task = Task<string>.Factory.StartNew(x =>
{
Thread.Sleep(TimeSpan.FromMinutes(5));
return text;
}, state);
return task.ContinueWith(result => callback(task));
}

public string EndDoEcho(IAsyncResult result)
{
return ((Task<string>) result).Result;
}

最佳答案

Azure cannot tell whether you have implemented your service synchronously or asynchronously.这是一个未在写入时公开的实现细节。无论问题的原因是什么 - 与您的服务通信的远程端都不会受到异步的影响。

事实上,您可以为客户端和服务器独立决定是否要使用异步。

使用给定的代码,如果超时时间低于 5 分钟,您应该总是会看到超时错误,因为服务器需要 5 分钟才能应答。服务器不会立即返回 5 分钟后完成的 IAsyncResultIAsyncResult 不可序列化,因此它永远不会通过网络传输。 5 分钟内什么也没有发送。

与此问题无关:使用 await 实现异步。容易多了。

您当前的服务器实现存在问题:您通过同步 sleep 阻塞线程 5 分钟。这完全否定了异步的好处。如果同时执行许多此类操作,这将导致线程池耗尽。

关于azure - Azure 服务总线中继是否支持异步 WCF 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27782902/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com