小编Ben*_*ams的帖子

如何获取System.Threading.Tasks.Task已完成的通知

我目前正在使用.net 4中的新System.Threading.Tasks功能替换一些新的实现功能.

我有一个小问题,虽然我可以想到一些解决方案,我想要一些建议,通常是最好的方法,如果我在某处错过了一个技巧.

我需要的是一个任意进程能够启动一个任务,然后继续而不是等待任务完成.不是问题,但是当我需要对任务的结果做一些事情时,我不太确定这样做的最佳方式.

我见过的所有示例都在任务上使用Wait()直到它完成或在任务上引用Result参数.这两个都将阻止启动Task的线程,这是我不想要的.

我想到的一些解决方案:

  1. 创建一个新线程并在其上启动任务,然后使用Wait()或.Result阻塞新线程并以某种方式将结果同步回调用者,可能需要轮询任务IsCompleted参数.

  2. 有一个'Notify Completed'任务,我可以在完成我要运行的任务后启动,然后引发静态事件或其他事情.

  3. 将委托传递给任务的输入并调用该任务以通知任务已完成.

我可以为所有这些人思考或利弊,但我特别不喜欢在第一个使用Task类的目标之一时必须显式创建一个新线程来启动任务的想法.从直接线程使用中抽象出来.

关于最佳方式的任何想法?我错过了一些简单的事吗?"完成"事件会不会要求太多了:)?(当然有一个很好的理由没有一个!)

.net c# .net-4.0

36
推荐指数
4
解决办法
3万
查看次数

FirstOrDefault收集对象

我有类似以下类的东西:

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()方法?如果可以的话会是什么语法?哪个也最有效?它不会是一个庞大的集合.

或者,有没有更好的方法一起做同样的事情?

c# linq

3
推荐指数
1
解决办法
4277
查看次数

标签 统计

c# ×2

.net ×1

.net-4.0 ×1

linq ×1