【发布时间】:2020-08-30 03:29:42
【问题描述】:
我正在构建一个新应用程序,因为我希望它像每个人一样流畅,所以我想使用一个后台线程来负责使用 restsharp 下载所有数据。我也遵循 MVVM 模式。 我已经阅读了很多关于 task.run 以及如何正确使用它以及整个 async-await 主题的内容。但由于我对这一切都是陌生的,我不确定我应该如何正确地做事。我有很多代码,所以我会简短地尝试解释我在做什么,然后放一个sn-p。
所以我开始创建一个服务类,其中包含所有使用 restsharp 获取数据的函数。在我的 ViewModel 中,我一开始就调用了这些函数。我尝试使用任务并在后台线程上运行这些功能,但应用程序在初始屏幕上被阻止。显然那是因为我做错了......所以我决定问你们。
我有这个功能的例子:
public string GetResPor()
{
var restClient = new RestClient { BaseUrl = new Uri("http://xxx.xxx.xxx.xxx:xxxx") };
var request = new RestRequest
{
Resource = "getCliPor",
Method = Method.GET
};
request.AddParameter(new Parameter { Name = "idt", Value = GetImAsync().GetAwaiter().GetResult(), Type = ParameterType.GetOrPost });
var result = restClient.Execute(request);
Port = result.Content;
return Port;
}
当我在任务上转换它时:
public async Task<string> GetResPor()
{
var restClient = new RestClient { BaseUrl = new Uri("http://xxx.xxx.xxx.xxx:xxxx") };
var request = new RestRequest
{
Resource = "getCliPor",
Method = Method.GET
};
request.AddParameter(new Parameter { Name = "idt", Value = GetImAsync().GetAwaiter().GetResult(), Type = ParameterType.GetOrPost });
var result = await restClient.ExecuteTaskAsync(request);
Port = result.Content;
return Port;
}
在 ViewModel 上,我首先创建服务类的新实例,然后:
Port = RD.GetRestauPort().GetAwaiter().GetResult();
这就是应用程序被阻止的地方,没有例外。
【问题讨论】:
-
async/await 与使用后台任务/线程不同
-
@Jason 感谢您的快速回复。我同意,这就是为什么我问,我如何使用背景线程?在另一个线程上运行所有数据下载的想法是否有帮助?你有任何可以帮助我的链接吗?
标签: api mvvm xamarin.forms async-await task