C# WCF异步服务器端-正确的实现

C# WCF异步服务器端-正确的实现,c#,wcf,async-await,C#,Wcf,Async Await,我正在编写一些WCF服务,我希望以最有效的方式编写它们。这意味着服务器端和客户端都将公开异步操作 客户端 我知道,在客户端契约中,我可以通过添加Assync后缀来公开异步操作: [ServiceContract] public interface IService1 { [OperationContract] string GetData(int value); [OperationContract] Task<string> GetDataAsyn

我正在编写一些WCF服务,我希望以最有效的方式编写它们。这意味着服务器端和客户端都将公开异步操作

客户端

我知道,在客户端契约中,我可以通过添加Assync后缀来公开异步操作:

[ServiceContract]
public interface IService1
{
    [OperationContract]
    string GetData(int value);

    [OperationContract]
    Task<string> GetDataAsync(int value);
}
然而,这似乎很乏味

为什么使用IAssyncResult而不是基于任务的异步操作?在WCF中实现异步服务器端的正确方法是什么?

如果您查看重点:

异步编程模型APM模式也称为IAsyncResult模式,其中异步操作需要Begin和End方法,例如,异步写入操作的BEGINWITE和ENDWITE。这种模式不再推荐用于新开发。有关详细信息,请参阅

基于任务的异步模式TAP,它使用单个方法表示异步操作的启动和完成。TAP是在.NET Framework 4中引入的,是.NET Framework中异步编程的推荐方法。C中的async和await关键字以及Visual Basic语言中的async和await运算符为TAP添加了语言支持。有关详细信息,请参阅

因此:

您正在阅读的这篇文章来自.NET4.0之前的时代,因此它相当古老。使用任务并忘记IAsyncResult的存在

[ServiceContract]
public interface IService1
{
    [OperationContract]
    Task<string> GetDataAsync(int value);
}
  [OperationContractAttribute(AsyncPattern=true)]
  IAsyncResult BeginServiceAsyncMethod(string msg, AsyncCallback callback, object asyncState);