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

azure服务总线中继是否支持异步wcf操作?,azure,azureservicebus,azure-servicebusrelay,Azure,Azureservicebus,Azure Servicebusrelay,服务总线中继是否支持异步wcf操作 我发现服务器未能返回具有以下代码的有意义响应。如果我将时间跨度更改为30秒,尽管它可以正常工作 按照本教程开始 客户端代码: var task = Task<string>.Factory.FromAsync(channel.BeginDoEcho, channel.EndDoEcho, input, null); Console.WriteLine("Server echoed: {0}", task.Result ); var task=t

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

我发现服务器未能返回具有以下代码的有意义响应。如果我将时间跨度更改为30秒,尽管它可以正常工作

按照本教程开始

客户端代码:

var task = Task<string>.Factory.FromAsync(channel.BeginDoEcho, channel.EndDoEcho, input, null);
Console.WriteLine("Server echoed: {0}", task.Result );
var task=task.Factory.fromsync(channel.BeginDoEcho,channel.EndDoEcho,input,null);
WriteLine(“服务器回显:{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;
}
public IAsyncResult BeginDoEcho(字符串文本、异步回调、对象状态)
{
var task=task.Factory.StartNew(x=>
{
睡眠(时间跨度从分钟(5));
返回文本;
},国家);
返回task.ContinueWith(result=>callback(task));
}
公共字符串EndDoEcho(IAsyncResult结果)
{
返回((任务)结果);
}
这是一个未在写入时公开的实现细节。无论问题的原因是什么,与服务通信的远程端并不是受到异步的影响

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

对于给定的代码,如果超时时间低于5分钟,则应该始终看到超时错误,因为服务器需要5分钟才能应答。服务器不会立即返回一个在5分钟后完成的
IAsyncResult
<代码>IAsyncResult不可序列化,因此它永远不会通过连接。5分钟内没有发送任何内容

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


您当前的服务器实现有一个问题:您正在使用同步睡眠阻塞一个线程5分钟。这完全否定了异步的好处。如果有许多这样的操作同时执行,这将导致线程池耗尽。

“如果我将超时更改为30秒,尽管它工作正常。”-您在哪里指定了超时?如前所述,服务器端代码有5分钟的睡眠时间。。因此,我不确定我是否理解您的代码/设置。我的意思是将TimeSpan.FromMinutes(5)更改为TimeSpan.FromSeconds(30)Ok,因此async在尝试处理azure空闲连接超时时不会给我带来任何好处。可能需要在后台线程上启动操作(以某种方式),然后轮询服务器以查看操作是否完成。这只是示例代码,真正的服务器代码实际上并不休眠。但有时可能需要一段时间:)