0

我正忙于创建需要 ASYNC 调用的 WCF Web 服务。到目前为止,我已经这样做了:

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

    return sent;
}

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

IE。在dll中

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

1 回答 1

6

您可能会发现我的async/ awaitintro 很有帮助。我也有专门处理asyncWCF的帖子。

一些一般要点:

  • 除非您明确希望在后台线程上运行某些代码,否则不要使用StartNew(或)。Task.Run
  • 你可以 await any Task,不管它来自哪里。返回 a 的方法Task可能是也可能不是async- 它只会该方法中产生影响。

因此,如果您ReceiveData是其中任何一个(它们看起来与 相同SendData):

public async Task<bool> ReceiveData(Data data);
public Task<bool> ReceiveData(Data data);

然后你可以awaitSendData

public async Task<bool> SendData(Data data)
{
  bool sent = await someNameSpace.ReceiveData(data);
  ... // do other stuff
  return sent;
}
于 2012-08-23T11:55:41.073 回答