C#从asyncron任务获取对象
我刚开始用c#进行线程编程。我真的不知道这个社区是否适合问这样的问题。如果没有,我很抱歉 我有两个函数,start()和status()。在start()中,我创建了一个新任务,如:C#从asyncron任务获取对象,c#,task,C#,Task,我刚开始用c#进行线程编程。我真的不知道这个社区是否适合问这样的问题。如果没有,我很抱歉 我有两个函数,start()和status()。在start()中,我创建了一个新任务,如: start() { for each(dir => ListOfAllDirs) { new Task(() => { yr.LoadAllFiles(dir); }).Start(); } } 因此,我有大约200个并行任务使用此代码运行: class yr {
start() {
for each(dir => ListOfAllDirs) {
new Task(() => { yr.LoadAllFiles(dir); }).Start();
}
}
因此,我有大约200个并行任务使用此代码运行:
class yr
{
List<Values> rv = new List<Values>();
public List<Values> LoadAllFiles(string dir)
{
[...DoStuff...]
rv.Add(...);
rv.Add(...);
rv.Add(...);
}
}
最后的结果是:
Dir AA -> 19 files checkes
Dir AB -> 12 files checkes
Dir BB -> 49 files checkes
Dir AA -> 29 files checkes
所以要明确的是:200个目录,200个任务,所有的东西都在异步运行。如何访问特定任务/从正在运行的任务中获取数据。您正在寻找类似的内容吗
var task = Task<List<values>>.Run((() => { return yr.LoadAllFiles(dir);}));
List<values> result = task.Result;
var task=task.Run((()=>{return yr.LoadAllFiles(dir);}));
列表结果=任务。结果;
如果它具有结果类型,则可以访问任务的结果。这将等待任务完成并获得结果。显然,您需要获取200个目录并为每个目录计算结果。PLINQ让这变得异常简单:
var results =
ListOfAllDirs
.AsParallel()
.Select(dir => new { dir, result = yr.LoadAllFiles(dir) })
.ToList();
这是你的目录列表和计算结果
您也可以通过任务手动执行。在这种情况下,您可能需要这样的序列:
问题是什么?如何通过运行asycron任务访问对象?这个问题非常模糊。你自己从头读到底。如果不是你,你能理解吗?我甚至不知道现在该具体问什么。你必须想办法解决这个问题。对不起,现在更好吗?更好,答案现在是可能的。好的,谢谢。这很有帮助。可以获取未完成任务的临时结果。因此,我可以每2秒检查一次,得到的结果是:“到目前为止,在Dir AA中找到了33个文件”[…]“到目前为止,在Dir AA中找到了44个文件”我可能会让任务本身报告进度。您可以让他们在取得某些进展时更新UI。或者,您可以遍历任务列表并检查它们的
状态
,以查看它们是否已完成。
var results =
ListOfAllDirs
.AsParallel()
.Select(dir => new { dir, result = yr.LoadAllFiles(dir) })
.ToList();