是否可以从TPL Task派生以从方法中返回更多详细信息?

问题描述 投票:15回答:4

我的原始方法如下:

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(只是随机字符串)。稍后我可以通过返回的查询结果...

c# .net asynchronous async-await task-parallel-library
4个回答
16
投票

我个人不会扩展


12
投票

我建议改用Task.AsyncState,因为它允许您“嵌入”任务结果中的其他信息。


4
投票

如果您do


-1
投票
Start

错误CS1983,异步方法的返回类型必须为空,任务或任务

© www.soinside.com 2019 - 2024. All rights reserved.