SonOfPirate
SonOfPirate

Reputation: 5494

How to restart/reuse a recurring Task?

I have a long-running Task that I've implemented using the Task Parallel Library. When the Task starts, I grab snapshots of several input values and collections then perform various operations using that information. If any of those values or collections change while the Task is running, I'd like to have the Task run again immediately upon completion. Should I be creating a new Task or is there a way to reuse the existing Task? What's the best way to start the second iteration?

Upvotes: 14

Views: 11225

Answers (3)

Janeks Bergs
Janeks Bergs

Reputation: 234

You could also refactor program logic to use function pointers (or delegates in VB.NET).

Upvotes: 0

svick
svick

Reputation: 244958

You can't start again an existing Task. So you have two options:

  1. Start a new Task. This is probably cleaner.
  2. Run an loop in your Task that checks whether something changed since the last time and if it does, starts a new iteration.

Upvotes: 1

Kendall Frey
Kendall Frey

Reputation: 44374

Create a new task.

As http://msdn.microsoft.com/en-us/library/dd270682.aspx points out, trying to restart a running or completed Task is not supported. It is rarely a good idea to do something that normally throws an exception, and re-using a Task is one of those things.

Upvotes: 12

Related Questions