Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
2年前关闭。
当我运行此代码时,没有任何块,都很好,很花哨:
但是其他代码可以,但我不明白为什么,感谢您的帮助,
编辑:我已经意识到GetAllAsync异步执行该sproc,但随后它从它返回的数据集中创建了一个类别列表,但那里没有异步,因此主线程选择了该类别并绑定了十万个类别!这会阻塞UI! h!
谢谢您的帮助,
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
2年前关闭。
当我运行此代码时,没有任何块,都很好,很花哨:
List<Category> cats = null;
cats = await cat.GetAllAsync();//no blocks here
cats = await cat.GetAllAsync();//no blocks here
cats = await cat.GetAllAsync();//no blocks here
cats = await cat.GetAllAsync();//no blocks here
cats = await cat.GetAllAsync();//no blocks here
但是其他代码可以,但我不明白为什么,感谢您的帮助,
var tasks = new List<Task>();
tasks.Add(cat.GetAllAsync());
tasks.Add(cat.GetAllAsync());
tasks.Add(cat.GetAllAsync());
tasks.Add(cat.GetAllAsync());
tasks.Add(cat.GetAllAsync());
await Task.WhenAll(tasks); //this blocks the UI thread
编辑:我已经意识到GetAllAsync异步执行该sproc,但随后它从它返回的数据集中创建了一个类别列表,但那里没有异步,因此主线程选择了该类别并绑定了十万个类别!这会阻塞UI! h!
谢谢您的帮助,
最佳答案
cat.GetAllAsync可重入\线程安全吗?
在第一个示例中,对cat.GetAllAsync的多次调用是按顺序运行的。
在您的第二个示例中,可能对cat.GetAllAsync的多个调用可以并行运行,我的猜测是这会导致cat.GetAllAsync内部出现锁\死锁。
10-06 02:44