Вчера на Так, я видел, что поток просил код, который некоторые, что делает этот путь. Я имею в виду, вы (поток менеджера) запускаете количество задач с помощью API TPL и после того как они - завершенное задание, тот поток должен уведомить вас (менеджер) назад, который поддерживает пул Задачи.
, Таким образом, вот код, который я попробовал. Хотя я должен сказать, что это работает, как я описываю выше.
class TaskJob
{
public delegate void NotificationDelegate(int? taskId,string message);
public event NotificationDelegate NotifyCompletion;
public void TaskToRun()
{
try
{
if (Task.CurrentId == 4)//If its a 4th thread, simulate exception
throw new Exception();
Console.WriteLine("Task started with thread id " + Task.CurrentId);
Thread.Sleep(100000);
Console.WriteLine("Task finished with thread id " + Task.CurrentId);
NotifyCompletion(Task.CurrentId, "Successfully completed");
}
catch
{
NotifyCompletion(Task.CurrentId, "Faulted error");
}
}
}
class Program
{
static List<Task> taskList = new List<Task>();
public static void Main()
{
for (int i = 0; i < 5; i++)//starting 5 threads/tasks
{
TaskJob tb = new TaskJob();
tb.NotifyCompletion += new ConsoleApplication1.TaskJob.NotificationDelegate(tb_NotifyCompletion);
Task t = Task.Factory.StartNew(tb.TaskToRun);
taskList.Add(t);
}
Task.WaitAll(taskList.ToArray());
CheckAndDispose();
Console.ReadLine();
}
private static void CheckAndDispose()
{
foreach (var item in taskList)
{
Console.WriteLine("Status of task = " + item.Id + " is = " + item.Status);
item.Dispose();
}
}
static void tb_NotifyCompletion(int? taskId, string message)
{
Console.WriteLine("Task with id completed ="+ taskId + " with message = " + message);
}
}
Несколько голов:
Теперь я задаю мне несколько вопросов, но сбой для убеждения меня с подходящим ответом. Вот они:
Большое спасибо :)