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
returnsTask[]
@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而不是操作。好的,我会做的。谢谢您的帮助。