相关疑难解决方法(0)

创建线程 - Task.Factory.StartNew vs new Thread()

我刚学习.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)

有什么区别?

谢谢

.net c# multithreading .net-4.0

99
推荐指数
3
解决办法
10万
查看次数

运行多个C#任务异步

嗨,通常我会用背景工作者这样做,但我想用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()完成时调用.

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

.net c# multithreading c#-4.0

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

如何最好地并行运行两个异步任务并等待两者的返回结果?

我正在寻找满足以下要求的模式的简单 C# 示例:

  1. 我想异步执行 2 个方法,在不等待第一个完成的情况下启动第二个方法。
  2. 每个方法都接受一个参数并返回和输出值。
  3. 然后我想在继续之前等待两者的结果。

这似乎是我可以轻松使用 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)

c# asynchronous async-await

0
推荐指数
1
解决办法
591
查看次数

标签 统计

c# ×3

.net ×2

multithreading ×2

.net-4.0 ×1

async-await ×1

asynchronous ×1

c#-4.0 ×1