Мой исходный метод выглядит так:
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
.