在 C# 应用程序中完成任务
Finish a task in c# application
我是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);
}
}
我需要知道如何停止任务的执行并在处理完成后杀死它的线程。
您可以为此使用 CancellationToken,然后在您的任务代码中定期检查它。参见例如:
- How to use the CancellationToken property?
- Suspending a Task using a CancellationToken in .NET C#
但看起来您的代码并不是特别适合于此。要取消任务,应该可以将其分成不同的步骤,但这里不是这种情况。
如果你更想中止任务(可能是因为数据库连接问题),那么你应该简单地给任务一个适当的超时,或者 - 甚至更简单 - return 一旦遇到错误。
编辑:还是我误会了你,你想在任务执行后中止任务?为此,您需要发明一台时间机器 - 如果您成功了,请告诉我 ;-)...
Task
已经完成后无法停止执行,因为根据定义,它已经停止执行。
Task.Run
将 return 线程池线程返回线程池(如果使用了池),或者如果使用了新线程,则允许分配的线程完成并自行关闭。
您无需明确执行任何操作。
我是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);
}
}
我需要知道如何停止任务的执行并在处理完成后杀死它的线程。
您可以为此使用 CancellationToken,然后在您的任务代码中定期检查它。参见例如:
- How to use the CancellationToken property?
- Suspending a Task using a CancellationToken in .NET C#
但看起来您的代码并不是特别适合于此。要取消任务,应该可以将其分成不同的步骤,但这里不是这种情况。
如果你更想中止任务(可能是因为数据库连接问题),那么你应该简单地给任务一个适当的超时,或者 - 甚至更简单 - return 一旦遇到错误。
编辑:还是我误会了你,你想在任务执行后中止任务?为此,您需要发明一台时间机器 - 如果您成功了,请告诉我 ;-)...
Task
已经完成后无法停止执行,因为根据定义,它已经停止执行。
Task.Run
将 return 线程池线程返回线程池(如果使用了池),或者如果使用了新线程,则允许分配的线程完成并自行关闭。
您无需明确执行任何操作。