2017-05-05 83 views
-1

我正在使用由System.IO.File.OpenText(string path)返回的System.IO.StreamReader,通過Task<string> ReadToEndAsync()方法生成異步全文本文件Task;如何獲取類似於StreamReader.ReadToEndAsync()返回但默認不啓動的任務?

據我所見,它返回一個啓動的任務,很像TaskFactory.StartNew(...);

什麼可能是一些不錯的方法來得到一個Task相同的結果,它產生的雖然休眠,直到開始一個更明確的方式?

+2

它重建的任務不像'StartNew',做'StartNew'會啓動一個新的線程。 'ReadToEndAsync'更接近於返回類似於['TaskCompletationSource .Task'](https://msdn.microsoft.com/en-us/library/dd449187(v = vs.110).aspx)的內容。 –

回答

3

執行此操作的正常方法是使用Func<Task<String>>委託來推遲任務的開始。

public Func<Task<string>> ReadToEndLater(string path) 
{ 
    return async() => 
    { 
     using(var file = System.IO.File.OpenText(path)) 
     { 
      return await file.ReadToEndAsync(); 
     } 
    } 
} 

一樣使用

var readLater = ReadToEndLater(somePath); 
//do stuff 

var someText = await readLater(); 

的任務就不會啓動(在=> { ... }裏面其實沒什麼被執行),直到你調用返回的委託()

相關問題