创建泛型方法的异步版本

时间:2015-02-26 11:03:58

标签: c# task generic-method

我有这种反序列化类型的通用方法

public static T Deserialize<T>(string xmlString)
{
    if (string.IsNullOrWhiteSpace(xmlString))
       return default(T);

    using (MemoryStream memStream = new MemoryStream(Encoding.Unicode.GetBytes(xmlString)))
    {               
       memStream.Position = 0;
       System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(T));
            return (T)serializer.Deserialize(memStream);                
    }
}

现在我希望制作一个我尝试过的异步版本。

public static Task DeserializeAsync(string xmlString)
{
    return Task.Run(() =>
    {
       Deserialize(xmlString));
    });
}

显然异步方法有语法错误,因为我缺少T。

我也尝试了这个,但我得到错误。

public static Task<T> DeserializeAsync(string xmlString)
{
   return Task.Run(() =>
   {
      Deserialize<T>(xmlString));
   });
}

有人能告诉我编写异步方法的正确方法吗?

1 个答案:

答案 0 :(得分:3)

您只是忘记将您的方法声明为通用(请注意<T>),实际上返回 Deserialize的结果:

public static Task<T> DeserializeAsync<T>(string xmlString)
{
   return Task.Run(() =>
   {
      return Deserialize<T>(xmlString));
   });
}

或更简单:

public static Task<T> DeserializeAsync<T>(string xmlString)
{
   return Task.Run(() => Deserialize<T>(xmlString)));
}