2012-08-23 42 views
0

我正忙于创建一个WCF Web服务,它需要一个ASYNC调用。我已经完成了目前为止:关于WCF和ASYNC的信息

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 
} 

回答

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); 

然后,你可以awaitSendData

public async Task<bool> SendData(Data data) 
{ 
    bool sent = await someNameSpace.ReceiveData(data); 
    ... // do other stuff 
    return sent; 
} 
+0

你会发现这在使用异步/等待时,WCF中的分布式事务也很有用:https://youtu.be/B-Q3T5KpiYk –