Можно ли унаследовать от задачи TPL для возврата дополнительных сведений из метода?

Мой исходный метод выглядит так:

string DoSomeWork();

Метод DoSomeWork запускает некоторую работу в другом потоке и возвращает идентификатор выполнения (просто случайную строку). Позже я могу запросить результаты по заданному идентификатору выполнения. Главное - сделать доступным идентификатор выполнения до того, как задание будет завершено.

Теперь я хочу изменить подпись, чтобы вернуть задачу, чтобы пользователь мог подождать, если захочет.

Task DoSomeWork();

В то же время мне все еще нужно вернуть идентификатор выполнения (например, для целей отслеживания), и я вижу несколько вариантов.Во-первых, если параметр out , второй - вернуть кортеж с идентификатором выполнения и задачей (в C # это выглядит не лучшим вариантом), и в-третьих, о котором я действительно хочу спросить.

Что, если я создам класс, который будет производным от Task class:

public class ExtendedTask : Task
{
     public string ExecutionID {get; set;}
}

Выглядит нормально? Или лучше решить другие варианты?

P.S. В BCL есть производные от классов Task.

ОБНОВЛЕНИЕ , кажется, я не смог определить это ясно enouthg. Но мне нужен доступ к ExecutionID до завершения задания, поэтому я не могу использовать Task.Result .

13
задан Mike Chaliy 13 February 2012 в 17:57
поделиться