gpt4 book ai didi

c# - Parallel.Foreach 和 Task 冲突

转载 作者:行者123 更新时间:2023-11-30 12:28:13 25 4
gpt4 key购买 nike

我正在以并行执行的方式将图像上传到云端:

// Make a TaskFactory that will use the UI thread's context
var uiFactory = new TaskFactory(TaskScheduler.FromCurrentSynchronizationContext());

Parallel.ForEach(FinalFileNames,
new ParallelOptions { MaxDegreeOfParallelism = 4 },
path =>
{
count++;
/* Calculate percentage of upload done */
double iPercentDone = (int)(((float)count / iTotalFiles) * 100);

// Send the progress report to the UI thread.
uiFactory.StartNew(() =>
UploadProgress.Value = iPercentDone;

LblProgress.Content = count.ToString(CultureInfo.InvariantCulture)
+ " file(s) uploaded from " + iTotalFiles +
" file(s)";
}
});

我面临的问题是,当我这样做时,UI 被阻塞了。原因似乎是在同一个线程中工作..

如果我确实将此 Parallel.ForEach 包装在“Task.Factory.New”中,那么它会进行异步调用,这不是我的要求。

请告诉我,如何解决 UI block 问题,以及如何不使调用异步。

最佳答案

Parallel.Foreach当从 UI 线程启动时,将阻塞 UI 线程直到完成,因此启动的任务将排队但不会运行,直到 UI 线程返回到其消息循环。

一种方法是运行 Parallel.Foreach在另一个线程中使用 Task.Run() ,更好的方法是将 async/await 与 IProgress<T> 结合使用

关于c# - Parallel.Foreach 和 Task 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22608084/

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