0

型を逆シリアル化するためのこの一般的な方法があります

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 が欠落しているため、明らかに async メソッドに構文エラーがあります。

私もこれを試しましたが、エラーが発生します。

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

非同期メソッドの正しい書き方を教えてもらえますか?

4

1 に答える 1

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)));
}
于 2015-02-26T11:12:22.813 に答える