.NET 6控制台程序如何避免OpenWriteAsync引发的InvalidOperationException异常
问题原因
异常的直接原因是OpenWriteAsync返回的是Task<BlobWriteStream>,你直接将这个Task对象赋值给了using var变量。using语句会在代码块结束时尝试处置这个Task,但此时Task还处于未完成状态(既没成功、失败也没取消),不符合Task只能在完成状态下被处置的规则,因此抛出异常。
修复代码
需要用await等待OpenWriteAsync任务完成,拿到实际的BlobWriteStream后再交给using管理:
var blobContainerClient = new BlobContainerClient(new UriBuilder("someUrl").Uri); var blockBlobClient = blobContainerClient.GetBlockBlobClient("somefile.txt"); using var stream = await blockBlobClient.OpenWriteAsync(true); // 这里可以对stream进行写入操作,比如: // await stream.WriteAsync(Encoding.UTF8.GetBytes("test content"));
额外说明
.NET 6及以上的控制台顶级语句默认支持异步操作,不需要手动包裹Main方法或使用Wait()/Result(这两种方式可能引发死锁或其他异步问题),直接使用await即可。
内容的提问来源于stack exchange,提问作者otk
相关产品推荐
相关产品推荐

