在c#应用程序中完成一项任务

时间:2015-02-12 14:57:07

标签: c# multithreading asynchronous task

我是初学者在C#中使用任务,我有这个方法:

  public async void GetAnimateur(Action<List<fsign_fiche_signaletique>, Exception> callback)
        {
            try
            {
                Task<List<fsign_fiche_signaletique>> data = (Task<List<fsign_fiche_signaletique>>)Task.Run(
                    () =>
                    {
                        DataEntities _db = new DataEntities();
                        _db.Configuration.LazyLoadingEnabled = false;
                        var dpcs = _db.fsign_fiche_signaletique.ToList();
                        return new List<fsign_fiche_signaletique>(dpcs);
                    });
                var result = await data;
                callback(result, null);
            }
            catch (Exception ex)
            {
                callback(null, ex);
            } 
        }

我需要知道如何在处理完成后停止执行任务并终止其线程。

2 个答案:

答案 0 :(得分:2)

Task完成之后无法停止执行,因为根据定义,它已经停止执行。

如果使用了池,

Task.Run会将线程池线程返回给线程池,或者如果使用了新线程,则允许分配的线程完成并自行拆除。

没有任何事情可以明确地做。

答案 1 :(得分:1)

您可以使用CancellationToken,然后在任务代码中定期检查。参见例如:

但看起来您的代码并不是特别适合这种情况。要取消任务,应该可以将其分成不同的步骤,但这不是这种情况。

如果您更多地考虑中止任务(可能是因为数据库连接问题),那么您应该只是给任务一个适当的超时,或者 - 甚至更简单 - 一旦遇到错误就从它返回。

编辑:或者我弄错了你想要在执行后中止任务?为此,你需要发明一台时间机器 - 如果你成功了,请告诉我; - )......