我正在嘗試多線程,但我無法弄清楚爲什麼在調用task.Execute()時,下面的代碼塊會阻塞UI?使用BeginInvoke在後臺線程上執行
public class Task<TRes>
{
private Func<TRes> _func;
public Task(Func<TRes> func)
{
_func = func;
}
public TRes Execute()
{
var iasync = _func.BeginInvoke(null, null);
return _func.EndInvoke(iasync);
}
}
我不想特別解決任何問題。只是想知道爲什麼即使當前線程(放置到「睡眠」的那個線程是ThreadPool線程(而不是主UI線程))時它阻塞Thread.Sleep。以下是使用Task類的按鈕單擊事件。
var task = new Task<string>(() =>
{
var start = DateTime.Now;
var isBackGround = Thread.CurrentThread.IsBackground ;
var isThreadPool = Thread.CurrentThread.IsBackground;
Thread.Sleep(5000);
return String.Format("Start {0} : End {1}", start, DateTime.Now);
}
);
this.label1.Text = task.Execute();