none
Bob,求助!在后台运行使用ThreadPool.RunAsync(),如何在运行超过一段时间后,结束这个线程? RRS feed

  • 问题

  • 有段代码在线程池中运行。我想在运行超过一定的时间如果还没运行完就手动把它结束掉。要怎么做?

    ThreadPool.RunAsync((param) => { 运行的代码... });





    2012年11月15日 1:09

答案

  • 用 CancelToken

                CancellationTokenSource cts = new CancellationTokenSource();
                cts.CancelAfter(2000); // 2 seconds
                await ThreadPool.RunAsync(async (p) =>
                 {
                     Task t = p.AsTask(cts.Token);
                     try
                     {
                         await t;
                     }
                     catch (TaskCanceledException cancelEx)
                     {
                         //...
                     }
                     catch (Exception ex)
                     {
                         //...
                     }
                     finally
                     {
                         //...
                     }
                 });


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年11月16日 7:20
    版主

全部回复

  • 用 CancelToken

                CancellationTokenSource cts = new CancellationTokenSource();
                cts.CancelAfter(2000); // 2 seconds
                await ThreadPool.RunAsync(async (p) =>
                 {
                     Task t = p.AsTask(cts.Token);
                     try
                     {
                         await t;
                     }
                     catch (TaskCanceledException cancelEx)
                     {
                         //...
                     }
                     catch (Exception ex)
                     {
                         //...
                     }
                     finally
                     {
                         //...
                     }
                 });


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年11月16日 7:20
    版主
  • 谢谢!

    2012年11月20日 2:00