永远不会调用asyn WCF服务的结束方法

时间:2016-09-14 20:51:11

标签: .net wcf iasyncresult

我正在尝试在我的WCF服务中实现异步模式。调用BeginMethod,但从不调用相应的EndMethod。调试服务器,在各个地方放置断点我注意到传递给BeginMethod的回调永远不会返回。我怀疑这就是为什么永远不会调用EndMethod的原因。

服务器代码的结构如下:

IAsyncResult BeginMethod([params], AsyncCallback callback, object asyncState)
{
    var task = Task<MyReturnType>.Factory.StartNew(()=>
    {
        //Do work here
        return value;
    });

    return task.ContinueWith(r=>
        {
            callback(task);
            return r;
        });
} 

MyReturnType EndMethod(IAsyncResult asyncResult)
{
    return ((Task<MyReturnType>)asyncResult).Result;
}

我的EndMethod中的断点永远不会到达,而callback(task);行永远不会返回。

1 个答案:

答案 0 :(得分:0)

问题是回调期望IAsyncResultTask<string>的实例中包含传递给BeginMethod的状态对象,老实说这应该是显而易见的,但我错过了它。 StarNewContinueWith的不同重载可以解决问题。发布我的解决方案,以便为某人节省一些头痛。

IAsyncResult BeginMethod([params], AsyncCallback callback, object asyncState)
{
    var task = Task<MyReturnType>.Factory.StartNew((s)=>
    {
        //Do work here
        return value;
    }, state);

    return task.ContinueWith((t, s)=>
    {
        callback(t);
        return t.Result;
    });
} 

MyReturnType EndMethod(IAsyncResult asyncResult)
{
     return ((Task<MyReturnType>)asyncResult).Result;
}