如何将文件上传至Blob容器?代码无报错但文件未出现在容器中
问题分析与解决方案
嘿,我一眼就揪出你代码里的关键问题啦!核心原因是控制台程序的主线程没等异步上传操作完成就直接退出了,导致文件还没来得及传到Azure Blob Storage,程序就终止了。
具体问题点
你在Main方法里直接调用了async void类型的Upload_it_Async方法。在控制台这类非UI/非事件驱动的场景下,async void方法不会让调用者等待异步任务完成——主线程跑完Main里的代码就直接结束进程,异步上传操作自然被中断。
修复步骤
只需要调整异步方法的返回类型,并让主线程等待异步操作完成:
- 修改异步方法返回类型:把
private static async void Upload_it_Async()改成private static async Task Upload_it_Async()。async Task是异步方法的标准返回类型(除了事件处理程序,尽量别用async void)。 - 让主线程等待任务完成:
- 如果你用的是C# 7.1及以上版本,直接把
Main改成异步版本:static async Task Main(string[] args) { await Upload_it_Async(); } - 如果是更低版本的C#,可以在
Main里用阻塞等待的方式:static void Main(string[] args) { Upload_it_Async().Wait(); // 或者用 Upload_it_Async().GetAwaiter().GetResult(); }
- 如果你用的是C# 7.1及以上版本,直接把
修复后的完整代码示例
using Azure.Storage.Blobs; using System.IO; using System.Threading.Tasks; namespace ConsoleApp1 { class Program { static async Task Main(string[] args) { await Upload_it_Async(); } private static async Task Upload_it_Async() { var filepath = @"C:\my_file.txt"; var connectionString = "你的存储账户连接字符串"; var containerName = "my_container"; BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString); var container = blobServiceClient.GetBlobContainerClient(containerName); var blockBlob = container.GetBlobClient("my_file.txt"); // 可选:如果容器不存在,自动创建它 await container.CreateIfNotExistsAsync(); using (FileStream fs = File.Open(filepath, FileMode.Open)) { await blockBlob.UploadAsync(fs); } } } }
额外检查点
除了异步等待的问题,你还可以确认这几点:
- 确保Azure存储账户的连接字符串正确,没有拼写错误或权限不足的情况
- 确认本地文件
C:\my_file.txt存在且程序有读取权限
内容的提问来源于stack exchange,提问作者user12625850
相关产品推荐
相关产品推荐

