Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 异步任务如何从方法返回值_C# - Fatal编程技术网

C# 异步任务如何从方法返回值

C# 异步任务如何从方法返回值,c#,C#,还有我的长跑手术 CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); Task tasks = PeriodicTaskFactory.Start(() => LongRunningOperation(), intervalInMilliseconds: 1000, synchronous: false, cancelToken: cancellationTokenSource.

还有我的长跑手术

CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();

Task tasks = PeriodicTaskFactory.Start(() => LongRunningOperation(), intervalInMilliseconds: 1000, synchronous: false, cancelToken: cancellationTokenSource.Token);

int taskId = Task.WaitAny(tasks);
但问题是如何从
任务
中的
LongRunningOperation
方法中获取值。方法
任务。结果
不存在。我想从每个任务中获取值

我从这里开始上课


谢谢

任务
没有返回值<代码>任务
执行

您必须修改
PeriodicTaskFactory
code以返回
Task
,然后创建
Task
对象。 该方法还应该接受
Func
(没有参数,返回T),而不是没有返回值的
操作

private String LongRunningOperation()
{
...
return proj.Name;
}
公共静态任务启动(Func-Func,
int intervalInMilliseconds=超时。无限,
int delayin毫秒=0,
int duration=Timeout.Infinite,
int maxIterations=-1,
bool synchronous=false,
CancellationToken cancelToken=新的CancellationToken(),
TaskCreationOptions periodicTaskCreationOptions=TaskCreationOptions.None)
{
Task Task=PeriodicTaskFactory.Start(长运行操作,间隔毫秒:1000,同步:false,取消令牌:取消令牌源.Token);
字符串结果=task.result;

任务
没有返回值;
任务
有返回值

您必须修改
PeriodicTaskFactory
code以返回
Task
,然后创建
Task
对象。 该方法还应该接受
Func
(没有参数,返回T),而不是没有返回值的
操作

private String LongRunningOperation()
{
...
return proj.Name;
}
公共静态任务启动(Func-Func,
int intervalInMilliseconds=超时。无限,
int delayin毫秒=0,
int duration=Timeout.Infinite,
int maxIterations=-1,
bool synchronous=false,
CancellationToken cancelToken=新的CancellationToken(),
TaskCreationOptions periodicTaskCreationOptions=TaskCreationOptions.None)
{
Task Task=PeriodicTaskFactory.Start(长运行操作,间隔毫秒:1000,同步:false,取消令牌:取消令牌源.Token);
字符串结果=task.result;

如果
Start
返回单个
Task
,那么您将无法在其上使用
Task.WaitAny
。我想您的意思是
Start
返回
Task[]
@dcastro“Start”return back“return Task.Factory.StartNew(main操作、cancelToken、TaskCreationOptions.LongRunning、TaskScheduler.Current);”那么这一行就错了:
int taskId=Task.WaitAny(tasks)
。不存在接受单个任务的
WaitAny
重载。谢谢。那么什么是正确的。您粘贴它作为回复的代码?我回复中的代码帮助您返回结果。您发布的代码没有出现编译错误吗?您到底想实现什么?如果
Start
返回单个
任务
我想你的意思是
Start
returns
Task[]
@dcastro“Start”return back“return Task.Factory.StartNew(mainAction,cancelToken,TaskCreationOptions.longtrunning,TaskScheduler.Current);“那么这行就错了:
int taskId=Task.WaitAny(tasks)
。没有任何
WaitAny
重载可以接受单个任务。谢谢。那么什么是正确的。你在回复中粘贴的代码?我回复中的代码可以帮助你返回结果。你发布的代码没有编译错误吗?你到底想实现什么?你能不能只是为了获取信息,用Wait把代码放回原处。以及在StartPeriodicTaskI中,at应该在{…}中。很抱歉,但是您必须自己修改
开始
代码。我给了您必要的提示:使用Task代替Task,Func代替Action。好的,我会做的。谢谢您的帮助。您能提供一些信息吗?用Wait放回代码。在{…}中应该是什么在StartPeriodicTaskI中,很抱歉,您必须自己修改
开始
代码。我给了您必要的提示:使用任务而不是任务,使用Func而不是操作。好的,我会做的。谢谢您的帮助。