运行多个C#任务异步

gul*_*aek 9 .net c# multithreading c#-4.0

嗨,通常我会用背景工作者这样做,但我想用C#Task来做,只是为了更好地理解Task.

问题是我有一个具有以下属性的类

    private int _number1;
    public int Number1
    {
        get { return _number1; }
        set { _number1 = value; OnPropertyChanged("Number1");}
    }

    private int _number2;
    public int Number2
    {
        get { return _number2; }
        set { _number2 = value; OnPropertyChanged("Number2");}
    }
Run Code Online (Sandbox Code Playgroud)

请注意我使用INotifyPropertyChanged.

Number1 = Task<int>.Factory.StartNew(() => GenerateResult()).Result;
Number2 = Task<int>.Factory.StartNew(() => GenerateResult2()).Result;
Run Code Online (Sandbox Code Playgroud)

GenerateResult和GenerateResult2只是dumme方法,他们睡觉然后返回一个数字.

我如何使这项工作异步?从现在开始,GenerateResult2()首先在GenerateResult()完成时调用.

我需要它能够工作异步,因为我不知道每个任务何时完成,或者即使它将完成.

Isa*_*avo 13

当您获得该Result属性时,您实际上正在等待任务完成.它将在后台线程上执行,但是在启动下一个线程之前,您正在主线程中等待完成.

有关详细信息,请参阅MSDN文档.

您应该能够从后台线程中分配属性:

Task<int>.Factory.StartNew(() => Number1 = GenerateResult());
Run Code Online (Sandbox Code Playgroud)

WPF数据绑定将负责将PropertyChanged事件编组到正确的调度程序线程.