有关WCF和ASYNC的信息

Joh*_*han 0 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;
}
Run Code Online (Sandbox Code Playgroud)

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

即.在dll内

public async Task<bool> ReceiveData(Data data) {
    // some async code
    // some code here
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*ary 6

您可能会发现我的async/ await介绍很有帮助.我还有一篇专门处理asyncWCF的帖子.

一些一般观点:

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

所以,如果你ReceiveData是其中任何一个(它们看起来一样SendData):

public async Task<bool> ReceiveData(Data data);
public Task<bool> ReceiveData(Data data);
Run Code Online (Sandbox Code Playgroud)

然后你就await可以了SendData:

public async Task<bool> SendData(Data data)
{
  bool sent = await someNameSpace.ReceiveData(data);
  ... // do other stuff
  return sent;
}
Run Code Online (Sandbox Code Playgroud)