В такс можно передать объект. А объектом может выступать что угодно. Соответственно это и будет вашей точкой обмена, вы туда кладёте исходные данные, такс результаты. Через cancellationTokenSource можно завершить таск преждевременно. Ну а Sync используется если у вас несколько поток и им необходимо синхронизироваться межу собой или например вы хотите забрать промежуточные результаты.
public class TaskState
{
public CancellationToken CancellationToken;
public int[] Input;
public int[] Output;
public object Sync;
}
private static void TaskBodyPoolQueue(object state)
{
var taskState = (TaskState)state;
do
{
// Calculate
} while (!taskState.CancellationToken.IsCancellationRequested);
taskState.Output = ...
}
taskStateProgress = new TaskState()
{
Input = ...,
CancellationToken = cancellationTokenSource.Token,
Sync = new object()
};
for (int i = 0; i < 6; i++)
ThreadPool.QueueUserWorkItem(new WaitCallback(TaskBodyPoolQueue), taskStateProgress);