我的原始方法如下:
string DoSomeWork();
[方法DoSomeWork
]在另一个线程上开始一些工作,并返回执行ID(只是随机字符串)。稍后,我可以通过返回的执行ID查询结果。要点是在作业完成之前使执行ID可用。
现在我想更改签名以返回Task
,因此用户可以根据需要等待。
Task DoSomeWork();
同时,我仍然需要返回执行ID(例如,出于跟踪目的),我看到一些选项。首先,使用out
参数,第二,返回具有执行ID和任务的元组(在C#中,这似乎不是最佳选择),第三,使用我实际上要询问的元组。]
如果我创建派生Task
的类怎么办:
public class ExtendedTask : Task { public string ExecutionID {get; set;} }
这看起来还好吗?还是决定其他选项更好?
P.S。在BCL中,有一些类是从Task
派生的。
UPDATE
,似乎我无法对此进行足够清晰的定义。但是我需要在作业完成之前访问ExecutionID,因此无法使用Task.Result
。我的原始方法如下:string DoSomeWork();方法DoSomeWork在另一个线程上开始一些工作,并返回执行ID(只是随机字符串)。稍后我可以通过返回的查询结果...
我个人不会扩展
我建议改用Task.AsyncState
,因为它允许您“嵌入”任务结果中的其他信息。
如果您do
Start
错误CS1983,异步方法的返回类型必须为空,任务或任务