使用嵌入式任务使用TPL

时间:2012-03-08 14:13:36

标签: c# task task-parallel-library

我在一个单独的线程上运行一个进程,以方便并发和平滑的用户界面调用

private void ThreadedTestConnection(SqlConnection conn, bool bShowErrMsg)
{
    Task<bool> asyncTestConn = Task.Factory.StartNew<bool> 
        (() => TestConnection(conn, bShowErrMsg)); 
    return asyncTestConn.Result;
    asyncTestConn.Dispose();
}
来自UI线程的

。但是,由return asyncTestConn引起的“等待”正在阻止UI线程释放回GUI。我提出了以下修复方法。从我从GUI发出的事件(不包括try / catch块)

private void SomeClick_Event(object sender, EventArgs e)
{
    Task testConnection = Task.Factory.StartNew
        (() => UtilsDB.ThreadedTestConnection(mainConn, true));
}

这很有效。也就是说,它会在单独的后台线程上运行测试时立即将控制权返回给GUI。我这样做是一个非常愚蠢的男孩,还是这个好吗?

注意:这是一个单独的问题,但与this one有关我没有得到满意的答案。

1 个答案:

答案 0 :(得分:1)

这是完全没问题的,你只是在一个线程池线程上运行的“即发即弃”任务 - 但是在第一个例子中你似乎期望得到一个结果(我假设一个布尔值表示是否连接测试是成功的) - 在第二个你不会有任何 - 除非你的任务,例如引发事件或调用预定义的回调。