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

End method of asyn WCF service is never called

我正在尝试在我的 WCF 服务中实现异步模式。 BeginMethod 被调用,但相应的 EndMethod 从未被调用。调试服务器,在不同的地方放置断点我注意到传递给 BeginMethod 的回调从不 returns。我怀疑这就是为什么从未调用 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); 行从未达到 returns。

问题是回调期望 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;
}