gpt4 book ai didi

c# - Task.ContinueWith() 在 Task.Run() 之后不工作

转载 作者:太空宇宙 更新时间:2023-11-03 20:51:28 24 4
gpt4 key购买 nike

我正在处理 xamarin 的事件指示器。我想在收到产品后停止指示器。

protected override void OnAppearing()
{
base.OnAppearing();

if (!_appeared) // Avoid repeat loding
{
activity.IsEnabled = true;
activity.IsRunning = true;
activity.IsVisible = true;

var task = Task.Run(() =>
{
ProductViewData productViewData = new ProductViewData();
products = productViewData.GetProductList("10");
count = 10;
productListView.ItemsSource = products;
});

task.ContinueWith(t =>
{
activity.IsEnabled = false;
activity.IsRunning = false;
activity.IsVisible = false;
});

_appeared = true;
}
}

感谢您的帮助。

最佳答案

像这样的代码使用 async/await 会容易得多:

protected override async void OnAppearing()
{
base.OnAppearing();

if (!_appeared) // Avoid repeat loding
{
_appeared = true;
activity.IsEnabled = true;
activity.IsRunning = true;
activity.IsVisible = true;

var products = await Task.Run(() =>
{
ProductViewData productViewData = new ProductViewData();
return productViewData.GetProductList("10");
});

productListView.ItemsSource = products;

activity.IsEnabled = false;
activity.IsRunning = false;
activity.IsVisible = false;
}
}

虽然代码简单易读,但幕后发生了很多事情,特别是关于此方法何时返回,以及 await 之后代码在哪个线程上运行。值得一读。

关于c# - Task.ContinueWith() 在 Task.Run() 之后不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54722658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com