Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有关WCF和异步的信息_C#_Wcf_Asynchronous_Async Await - Fatal编程技术网

C# 有关WCF和异步的信息

C# 有关WCF和异步的信息,c#,wcf,asynchronous,async-await,C#,Wcf,Asynchronous,Async Await,我正忙于创建一个WCF Web服务,它需要一个异步调用。到目前为止,我已经做到了: public async Task<bool> sendData(Data data) { bool sent = await Task<bool>.Factory.StartNew(() => { return someNameSpace.ReceiveData(data); }); return sent; } 公共异步任务sendDa

我正忙于创建一个WCF Web服务,它需要一个异步调用。到目前为止,我已经做到了:

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

    return sent;
}
公共异步任务sendData(数据){
bool sent=wait Task.Factory.StartNew(()=>{
返回someNameSpace.ReceiveData(数据);
});
返回发送;
}
所以我的问题是,对dll的调用是否也需要标记为异步

即在dll中

public async Task<bool> ReceiveData(Data data) {
    // some async code
    // some code here
}
公共异步任务接收数据(数据){
//一些异步代码
//这里有一些代码
}
您可以找到我的。我也有一个专门处理这个问题的帖子

一些要点:

  • 除非明确希望在后台线程上运行某些代码,否则不要使用
    StartNew
    (或
    Task.Run
  • 您可以等待任何
    任务
    ,无论它来自何处。返回
    任务的方法可以是
    异步的,也可以不是
    异步的
    ——它只在该方法中起作用
因此,如果您的
ReceiveData
是其中之一(它们看起来与
SendData
相同):

你可以找到我的。我也有一个专门处理这个问题的帖子

一些要点:

  • 除非明确希望在后台线程上运行某些代码,否则不要使用
    StartNew
    (或
    Task.Run
  • 您可以等待任何
    任务
    ,无论它来自何处。返回
    任务的方法可以是
    异步的,也可以不是
    异步的
    ——它只在该方法中起作用
因此,如果您的
ReceiveData
是其中之一(它们看起来与
SendData
相同):


在使用async/await时,您可能会发现这对于WCF中的分布式事务也很有用:在使用async/await时,您可能会发现这对于WCF中的分布式事务也很有用:
public async Task<bool> ReceiveData(Data data);
public Task<bool> ReceiveData(Data data);
public async Task<bool> SendData(Data data)
{
  bool sent = await someNameSpace.ReceiveData(data);
  ... // do other stuff
  return sent;
}