C# 如何访问任务参数?
假设我有一个C# 如何访问任务参数?,c#,multithreading,task,C#,Multithreading,Task,假设我有一个列表: 因此Foo类包含doworksync方法,其设计类似于: public async Task HeavyAsync() { while (true) { string newData = DateTime.Now.ToLongTimeString(); Console.WriteLine(newData); await Task.Delay(200); } } 实际上,我可以使用\u tasks[0]启
列表
:
因此Foo
类包含doworksync
方法,其设计类似于:
public async Task HeavyAsync()
{
while (true)
{
string newData = DateTime.Now.ToLongTimeString();
Console.WriteLine(newData);
await Task.Delay(200);
}
}
实际上,我可以使用\u tasks[0]启动任务代码>
这是可行的,但主要问题是我想要访问Foo
类的公共属性,但我不能,因为当我键入此命令时:\u tasks[0]。
我将获得以下方法:
我还尝试使用GetAwaiter()
和await
:
var foo = await _tasks[0];
但我将得到以下错误:
无法将void赋值给隐式类型的局部变量
如何访问Foo
属性?您必须更改方法的接口。任务只是一个“函数指针”,它被执行并完成。如果需要包含已执行函数的对象,则必须将其保存或返回到某个位置
我将执行以下操作:更改async方法以返回如下对象:
public async Task<Foo> HeavyAsync()
{
while (true)
{
string newData = DateTime.Now.ToLongTimeString();
Console.WriteLine(newData);
await Task.Delay(200);
}
return this;
}
应该使用foo为您提供对foo对象的引用
更新:
或者为类Foo提供以下属性和方法:
class Foo
{
private Task runningTask {get;set;}
public void StartTask()
{
runningTask = Task.Start( () => ....);
}
public async Task WaitTask()
{
await runningTask;
}
public bool IsRunning => runningTask != null && runningTask.Status......
您可以保存Foo实例列表,而不是在调用方法中保存任务列表。但是如果我在类Foo
中有一个名为IsRunning
的属性,并且我需要使用Task
访问该属性,该怎么办?啊,我明白了。然后,您需要将任务另存为Foo类中的属性,而不是在调用方法中拥有任务列表,然后您必须拥有Foo列表。我会更新answer@gofal3谢谢,我喜欢你的更新。我有一个问题:如果我创建一个列表
,并且doworksync
方法是一个任务
,那么Foo
的每个实例将执行一个不同的任务
?是。创建一个列表,对于每个调用StartTask的实例,每个实例都会在内部调用Task.Start,因此每个Foo实例都有一个单独的任务。
public async Task<Foo> HeavyAsync()
{
while (true)
{
string newData = DateTime.Now.ToLongTimeString();
Console.WriteLine(newData);
await Task.Delay(200);
}
return this;
}
var foo = await _tasks[0];
class Foo
{
private Task runningTask {get;set;}
public void StartTask()
{
runningTask = Task.Start( () => ....);
}
public async Task WaitTask()
{
await runningTask;
}
public bool IsRunning => runningTask != null && runningTask.Status......