我目前正在使用.net 4中的新System.Threading.Tasks功能替换一些新的实现功能.
我有一个小问题,虽然我可以想到一些解决方案,我想要一些建议,通常是最好的方法,如果我在某处错过了一个技巧.
我需要的是一个任意进程能够启动一个任务,然后继续而不是等待任务完成.不是问题,但是当我需要对任务的结果做一些事情时,我不太确定这样做的最佳方式.
我见过的所有示例都在任务上使用Wait()直到它完成或在任务上引用Result参数.这两个都将阻止启动Task的线程,这是我不想要的.
我想到的一些解决方案:
创建一个新线程并在其上启动任务,然后使用Wait()或.Result阻塞新线程并以某种方式将结果同步回调用者,可能需要轮询任务IsCompleted参数.
有一个'Notify Completed'任务,我可以在完成我要运行的任务后启动,然后引发静态事件或其他事情.
将委托传递给任务的输入并调用该任务以通知任务已完成.
我可以为所有这些人思考或利弊,但我特别不喜欢在第一个使用Task类的目标之一时必须显式创建一个新线程来启动任务的想法.从直接线程使用中抽象出来.
关于最佳方式的任何想法?我错过了一些简单的事吗?"完成"事件会不会要求太多了:)?(当然有一个很好的理由没有一个!)
我有类似以下类的东西:
public class Animal
{
...
}
public class Cow : Animal
{
...
}
public class AnimalCollection : List<Animal>
{
public Animal GetFirstAnimal<T>()
{
foreach(Animal animal in this)
{
if(animal is T)
return T as Animal
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
几个问题:是否可以在集合上使用FirstOrDefault而不是GetFirstAnimal()方法?如果可以的话会是什么语法?哪个也最有效?它不会是一个庞大的集合.
或者,有没有更好的方法一起做同样的事情?