0

我正在尝试在我的 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);永远不会返回。

4

1 回答 1

0

问题是回调期望IAsyncResult的实例 Task<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;
}
于 2016-09-15T02:55:41.853 回答