2017-05-05 88 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(); 

的任务就不会启动(在=> { ... }里面其实没什么被执行),直到你调用返回的委托()

相关问题