我刚学习.Net 4中新的线程和并行库
在过去,我会像这样创建一个新线程(作为示例):
DataInThread = new Thread(new ThreadStart(ThreadProcedure));
DataInThread.IsBackground = true;
DataInThread.Start();
Run Code Online (Sandbox Code Playgroud)
现在我能做到:
Task t = Task.Factory.StartNew(() =>
{
ThreadProcedure();
});
Run Code Online (Sandbox Code Playgroud)
有什么区别?
谢谢
嗨,通常我会用背景工作者这样做,但我想用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()完成时调用.
我需要它能够工作异步,因为我不知道每个任务何时完成,或者即使它将完成.
我正在寻找满足以下要求的模式的简单 C# 示例:
这似乎是我可以轻松使用 async 和 await 关键字的场景,但是在查看了几个 Hello World 示例后,我很惊讶我无法轻松地同时满足上述所有条件。例如,虽然使用 await 关键字使我的 UI 不会阻塞并允许我的应用程序在我等待方法完成时继续响应事件,但这些方法仍在同步执行。或者,如果我能够异步执行,我在尝试将输入参数传递给调用方法并接收返回结果时遇到了麻烦。
以下内容似乎符合我的要求,并让我相信我可以充分利用它,但首先我想得到您关于如何改进它的反馈。
我之前玩过 Threads 并发现它使我的代码变得更加复杂,并期望“async 和 await”关键字会让我的生活更轻松,但以下似乎满足我要求的代码甚至没有使用这些关键字。我在这里使用“并行任务库”吗?如果是这样,您将如何将此库中的功能与 async 和 await 功能进行对比?
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
namespace ASyncCourse
{
static class Program
{
static void Main()
{
int result1 = 0;
int result2 = 0;
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
Task task1 = Task.Run(() => result1 = DoSomeWork(1));
Debug.WriteLine($"After Task1: {stopWatch.Elapsed}");
Task task2 = Task.Run(() => result2 = DoSomeOtherWork(10)); …
Run Code Online (Sandbox Code Playgroud)