2015-02-26 47 views
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.

我也嘗試這樣做,我得到的錯誤。

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

任何人都可以看到編寫async方法的正確方法嗎?

+3

爲什麼使它'async'?沒有I/O需要等待。如果方法採用'Stream'而不是'string',那麼你可以獲得一些東西。 –

+0

等待在調用方法中完成,即等待DeserializeAsync(blahblah);那是不對的? – Gaz83

+1

那麼等待的調用方法是什麼? DeserializeAsynch方法是CPU密集型的,所以它不能像它需要做一些I/O那樣放棄時間。 –

回答

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))); 
} 
+0

這樣做!會在5分鐘後做出回答 – Gaz83