Rex*_*Lam 7 c# vb.net multithreading task backgroundworker
我有"谷歌搜索"但仍然与任务,线程和后台工作者混淆.....
"任务是在当前线程上运行的高级API"是否正确?
如果1是正确的,为什么我需要使用invoke来更改同一线程中任务内的UI?
Backgroundworker在应用程序中只获得最低优先级?那么backgroundworker的性能低于任务和线程?对 ?
最后,在我的应用程序中,我需要使用"HttpWebRequest"从服务器获取一个字符串,之后解析字符串并更新UI.如果我使用"HttpWebRequest.BeginGetResponse"来等待异步结果并触发一个完整的事件来更新UI,我需要使用invoke方法来调用UI线程控件,但是我可以使用后台工作器代替吗?我可以简单地在"RunWorkerCompleted"事件中更改UI,有什么不利之处吗?
对不起我的游泳池英语并感谢您的帮助......!
1)否,默认情况下,任务在线程池线程上运行.但是,您可以提供另一个可以以不同方式运行任务的调度程序.
3)默认优先级没有差异.BackgroundWorker
也运行在线程池线程上.
4)使用TaskFactory.FromAsync
是处理异步Web请求的一种相当简单的方法:
Task.Factory.FromAsync<WebResponse>(request.BeginGetResponse, request.EndGetResponse, null)
.ContinueWith(
t =>
{
using (var response = (HttpWebResponse)t.Result)
{
// Do your work
}
},
TaskScheduler.FromCurrentSynchronizationContext()
);
Run Code Online (Sandbox Code Playgroud)
使用TaskScheduler.FromCurrentSynchronizationContext
确保ContinueWith
在当前线程上调用回调.因此,如果在UI线程上创建任务,则将在后台检索响应,然后在UI线程上处理.