有关WCF和ASYNC的信息

时间:2012-08-23 08:22:35

标签: c# wcf asynchronous async-await

我正忙着创建一个需要ASYNC呼叫的WCF Web服务。到目前为止我已经这样做了:

public async Task<bool> sendData(Data data) {
    bool sent = await Task<bool>.Factory.StartNew(() => {
        return someNameSpace.ReceiveData(data);
    });

    return sent;
}

所以我的问题是,对dll的调用是否也需要标记为异步?

即。在dll中

public async Task<bool> ReceiveData(Data data) {
    // some async code
    // some code here
}

1 个答案:

答案 0 :(得分:6)

您可以找到我的async/await intro helpful。我还有一篇专门处理async WCF的帖子。

一些一般观点:

  • 除非您明确要在后台线程上运行某些代码,否则请勿使用StartNew(或Task.Run)。
  • 您可以等待任何Task,无论它来自哪里。返回Task的方法可能是async也可能不是ReceiveData - 它只会在 方法中产生差异。

因此,如果您的SendData是其中任何一个(它们看起来与public async Task<bool> ReceiveData(Data data); public Task<bool> ReceiveData(Data data); 相同):

await

然后你可以SendData中的public async Task<bool> SendData(Data data) { bool sent = await someNameSpace.ReceiveData(data); ... // do other stuff return sent; }

{{1}}