使用 await 和 async 返回字符串列表

  • 我在组织租户 azure 环境中部署了一个 ASP.NET (4.5) 网站。

  • 它具有向/从网络位置(我们称之为 nas 驱动器)上传/下载/删除文件(任何类型)的功能,例如 \nas8782\xyz\abc\

  • 上传/下载/删除工作正常(见下面的代码)。我们使用由 Azure 团队创建的 CloudSdk.Azure 库。

    • nasClient.UploadAsync

    • nasClient.DownloadAsync

    • nasClient.DeleteAsync

    • nasClient.ListFilesAsync

文件服务.cs

using CloudSdk.Azure;


private string userId = ConfigurationManager.AppSettings["userId"].ToString();

    private string userPassword = ConfigurationManager.AppSettings["userPassword"].ToString();

    private string baseNasLocation = ConfigurationManager.AppSettings["baseNasLocation"].ToString();

    string env = ConfigurationManager.AppSettings["env"].ToString().ToUpper();


public async Task Upload(string fileName, string fileToSave, string projectID)

    {

        var nasClient = new NasClient(userId, userPassword);

        var localFiles = new List<string>();

        localFiles.Add(fileToSave);

        await nasClient.UploadAsync(baseNasLocation + env + @"\" + projectID + @"\", localFiles);

}

public async Task Download(string fileToDownload, string projectID)

    {

        var nasClient = new NasClient(userId, userPassword);

        Stream stream2 = nasClient.DownloadAsync(baseNasLocation + env + @"\" + projectID + @"\" + fileToDownload).Result;

        var appPath2 = HostingEnvironment.MapPath("~\\TempUpload");

        var localFullPath2 = string.Format("{0}\\{1}", appPath2, fileToDownload);

        using (var fileStream2 = System.IO.File.Create(localFullPath2))

        {

            stream2.CopyTo(fileStream2);

        }

}



 public async Task Delete(string fileToDelete, string projectID)

    {

        var nasClient = new NasClient(userId, userPassword);

        Task stream2 = nasClient.DeleteAsync(baseNasLocation + env + @"\" + projectID + @"\" + fileToDelete);

}


问题

- 这个 CloudSdk.Azure 库有另一个函数调用 ListFilesAsync,它获取提供的路径中存在的所有文件的列表。

我正在使用下面的代码来做同样的事情,但无法得到它。

如果我调用这个 Fileservice 方法

没有 async 和 await - 它运行但一直运行并且从不返回结果。


九州编程
浏览 235回答 2
2回答

梵蒂冈之花

您可以使用 Task.Result 以同步方式获取 Task 的结果。字符串结果 = Task.Result;此外,您不应使用 JsonConvert.DeserializeObject 来创建任务。我不确定你想在那里做什么。您可以使用允许动态访问的 JObject。
打开App,查看更多内容
随时随地看视频慕课网APP