我有以下方法:
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());
}
Run Code Online (Sandbox Code Playgroud)
如何正确处置memoryStream,在Task?我需要memoryStream在任务完成时处理对象.
将循环体拆分while为一个单独的async方法:
private async Task WriteAsync(...)
{
using (var memoryStream = new MemoryStream(...))
{
await _pageBlob.WritePagesAsync(memoryStream, ...);
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用你的新方法:
public void Write() {
var tasks = new List<Task>();
while(...) {
tasks.Add(WriteAsync(...));
}
Task.WaitAll(tasks.ToArray());
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,阻塞异步代码(Task.WaitAll)通常不是一个好主意。更自然的方法是保持异步:
public async Task WriteAsync() {
var tasks = new List<Task>();
while(...) {
tasks.Add(WriteAsync(...));
}
await Task.WhenAll(tasks);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1129 次 |
| 最近记录: |