public voID Write() { var tasks = new List<Task>(); while(...) { var memoryStream = new MemoryStream(...); var task = _pageBlob.WritePagesAsync(memoryStream,... ); tasks.Add(task); } Task.WaitAll(tasks.ToArray());}
如何在Task中正确处理memoryStream?我需要在任务完成时处理memoryStream对象.
解决方法 将while循环体拆分为单独的异步方法:private async Task WriteAsync(...){ using (var memoryStream = new MemoryStream(...)) { await _pageBlob.WritePagesAsync(memoryStream,...); }}
然后使用您的新方法:
public voID Write() { var tasks = new List<Task>(); while(...) { tasks.Add(WriteAsync(...)); } Task.WaitAll(tasks.ToArray());}
另外,阻塞异步代码(Task.WaitAll)通常不是一个好主意.更自然的方法是保持异步:
public async Task WriteAsync() { var tasks = new List<Task>(); while(...) { tasks.Add(WriteAsync(...)); } await Task.WhenAll(tasks);}总结
以上是内存溢出为你收集整理的c# – 如何处置Task中使用的MemoryStream?全部内容,希望文章能够帮你解决c# – 如何处置Task中使用的MemoryStream?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)