Это нормально, чтобы получить из задачи TPL, чтобы вернуть больше деталей из метода?
Мой оригинальный метод выглядит так:
string DoSomeWork();
методDoSomeWork
начинает некоторую работу в другом потоке и возвращает идентификатор выполнения (просто случайная строка). Позже я могу запросить результаты по заданному идентификатору выполнения. Главное, чтобы идентификатор выполнения был доступен до завершения задания.
Теперь я хочу изменить подпись, чтобы она возвращала Task, чтобы пользователь мог ждать, если захочет.
Task DoSomeWork();
В то же время мне все еще нужно вернуть идентификатор выполнения (например, для целей отслеживания), и я вижу несколько вариантов. Сначала еслиout
параметр, второй, должен возвращать кортеж с идентификатором выполнения и задачей (в C # это выглядит не лучшим вариантом), и третий, о котором я действительно хочу спросить.
Что если я создам класс, который будет производным отTask
класс:
public class ExtendedTask : Task
{
public string ExecutionID {get; set;}
}
Это выглядит хорошо? Или лучше выбрать другие варианты?
Постскриптум В BCL есть некоторые производные от классов Task.
ОБНОВИТЬКажется, я не смог определить это ясно. Но мне нужен доступ к ExecutionID, прежде чем работа будет завершена, и поэтому я не могу использоватьTask.Result
.