WCF使用异步/等待-客户端中的通道阻塞

WCF使用异步/等待-客户端中的通道阻塞,wcf,asynchronous,task,block,Wcf,Asynchronous,Task,Block,我正在使用.Net 4.5,我的服务是使用异步和返回任务编写的。 当我从客户端呼叫服务时,我使用wait。 当服务在等待之后返回时,如果客户端代码调用另一个非异步操作,则通道似乎被阻塞 示例代码: value = await Service.InitAsync(); Service.SyncOperation(); // Further callbacks/return values from Server are blocked and this statement never returns

我正在使用.Net 4.5,我的服务是使用异步和返回任务编写的。
当我从客户端呼叫服务时,我使用wait。
当服务在等待之后返回时,如果客户端代码调用另一个非异步操作,则通道似乎被阻塞

示例代码:

value = await Service.InitAsync();
Service.SyncOperation(); // Further callbacks/return values from Server are blocked and this statement never returns
(在我看来,async/await的全部要点是允许我在一个方法中编写完整的流,并让框架处理线程和回调)

我可以通过使用新任务包装对服务的调用,然后使用新任务来解决此问题。收益率:

async Task<T> CallAsync<T>(Func<Task<T>> func)
{
    Task<T> t = await func;
    await Task.Yield();
    return t;
}
我的问题是,有没有其他方法可以在不将服务调用包装到客户端的情况下实现这一点? 可能是服务中的某些属性或属性


谢谢

这个活动代表什么?什么时候设置?目前我只有一种情况,这种情况会发生,事件会立即设置。但是,在构建系统时,我不想限制自己编写调用异步WCF方法的代码,也不能在等待后执行长时间的操作。我更改了示例代码并删除了事件以显示更常见的场景,因此您可以先异步调用服务,然后同步。虽然调用了同步方法,但您希望不会被阻止?我很困惑。为什么不总是使用await async?当然,我希望在调用sync方法时客户端被阻塞,但我不希望服务器的返回通道也被阻塞。我认为服务器将能够继续发送回调并为其他调用返回值。
value = CallAsync(Service.InitAsync);
Service.SyncOperation(); //Now the server is not blocked since Yield changed back to the client context.