2015-02-26 48 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