我需要在后台运行类方法。 此方法将立即生效,没有返回值。 它可以同时使用不同的参数多次运行。 我不会从事这项后台工作,以免干扰主应用程序。
应该将其作为新线程吗?作为异步? 我在这里很困惑。 在某些代码段下面。
private void timerAction_Tick(object sender, EventArgs e)
{
Action actionTask = () => new StuffService().FireAndForgetCommand();
actionTask.BeginInvoke(actionTask.EndInvoke, null);
Task.Factory.StartNew(() => new StuffService().FireAndForgetCommand());
Task.Factory.StartNew(() => new StuffService().FireAndForgetCommand(), TaskCreationOptions.RunContinuationsAsynchronously);
}
public class StuffService
{
public void FireAndForgetCommand()
{
// do some stuff, longer then 100ms
// if exception occurs then log it
for(int i = 0; i < Int32.MaxValue; i++)
{ }
}
}
我正在尝试了解实现此目标的最佳方式(最节省,最有效...)。
或者我应该只使用BackgroundWorker Class吗?
答案 0 :(得分:-1)
在我看来,就像一个简单的任务案例。异步似乎不合适,因为它假设它将返回并根据上下文执行魔术操作。使任务异步只是矫kill过正,BackgroundWorkers与Tasks似乎并没有太大不同。
此外,您可能希望在某个时候取消作业以正常关闭,任务轻松地支持了该任务,并且您可能希望将其标记为长期运行的任务;也是一个功能。
但是!您的示例建议您将弄乱一个富文本框,该文本框与前景线程和调度程序严重纠缠在一起。您可能会忘记任务,但应用程序却无法,任务到达输出的顺序可能很重要,而可能不是您要求它们的顺序。考虑将单个任务作为一种服务并发送消息,以允许该任务正确管理在输出中添加行的过程。