调用Asyc Task <T>方法

evi*_*shi 2 c# task async-await win-universal-app windows-10-universal

我现在正在学习异步(UWP)方法,并且不能完全理解语法.所有示例都有很多事情,而不仅仅是Task异步调用,并没有真正显示它们是如何启动的.我不明白的主要问题是如何从非异步方法启动任务.每当我尝试调用任务时,它都希望我将该方法转换为异步方法.反过来又希望我将任何调用该方法的方法转为异步.那你怎么开始呢?

我正在尝试的当前用例是从UWP localstorage中检索一个充满用户名和ID的JSON文件,现在UWP中的这是一个异步调用.我很确定我的方法是正确的但是我在调​​用它时遇到了问题.目前我在它支持的页面后面的代码中调用方法,其中实际方法当前驻留在User Class中.

这是我的代码:

public async Task<List<User>> getUsers()
    {
        List<User> u = new List<User>();
        StorageFolder folder = ApplicationData.Current.LocalFolder;
        StorageFile file = await folder.GetFileAsync("LocalUsers.txt");
        string Json = await FileIO.ReadTextAsync(file);
        List<User> existingUsers = new List<User>();
        existingUsers = JsonConvert.DeserializeObject<List<User>>(Json);
        return existingUsers;
    }
Run Code Online (Sandbox Code Playgroud)

这就是我试图从后面的代码中调用方法的方法

    List<User> users = await User.getUsers();
Run Code Online (Sandbox Code Playgroud)

我已经尝试过像这样运行任务,但我不认为我的sytax是正确的

    Task t = new Task(User.getUsers());
Run Code Online (Sandbox Code Playgroud)

任何援助都会得到很大的帮助.谢谢.

Ste*_*ary 6

我不明白的主要问题是如何从非异步方法启动任务.每当我尝试调用任务时,它都希望我将该方法转换为异步方法.反过来又希望我将任何调用该方法的方法转为异步.那你怎么开始呢?

正如我在异步最佳实践文章中描述的那样,async通过代码库"增长".这很自然,应该被接受.特别是在UWP这样的平台上,阻塞异步代码很容易导致死锁,并使您立即从应用商店取消资格.

在最简单的情况下,async增长会停止在异步事件处理程序中,即async void.如果您正在进行基于MVVM的开发,还有其他注意事项; 我在关于异步MVVM开发的三篇MSDN系列文章中介绍了这些内容.

如果你有一个现有的代码库,你也可能会发现我对brownfield async的文章很有帮助.