标签: task

没有在C#中获得TASK和WAIT

我有一堆需要异步调用的web api调用.我从未使用过aysnc.

我创建了一个简单的测试控制台程序,类似于:

class Program
{
    static void Main(string[] args)
    {
        ClassOne xx = new ClassOne();
        var v1 = xx.DummyTask();
    }
}
Run Code Online (Sandbox Code Playgroud)

将类定义为:

namespace GHTest.classes
{
    public class ClassOne
    {
        GitHubClient client;

        public ClassOne()
        {
           client = new GitHubClient(new ProductHeaderValue("OMHSite"));
        }

        public async Task<string> DummyTask()
        {
            Task<Repository> task = client.Repository.Get("openEHR", "CKM-mirror");
            task.Wait();

            var myResult = task.Result;
            return myResult.FullName;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Visual Studio声明我应该使用"await"运算符,因为此代码将同步运行.等待运营商在哪里?

此外,如果以下语句抛出异常,我如何在任务中捕获它

client.Repository.Get("openEHR", "CKM-mirror");
Run Code Online (Sandbox Code Playgroud)

c# asynchronous task async-await openehr

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

在任务c#中更新Int32

有没有办法增加任务内部的int值?或者这是在任务中递增int的正确语法?示例代码:

public int erCount = 9;
static void Main(string[] args){
    Task.Factory.StartNew(() => { 
        ...do some task
        if(errorfound)
            erCount++;
    });
    Task.Wait();
    Console.Writeline(erCount.toString());
}
Run Code Online (Sandbox Code Playgroud)

我似乎没有在线程内增加值.任何帮助都会很棒!

c# multithreading task thread-safety task-parallel-library

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

C#任务未完成(命令提示符中没有结果)

using System;
using System.Threading.Tasks;

namespace _1._8_Starting_A_New_Task
{
    public static class Program
    {
        public static void Main()
        {
            Task t = new Task(() =>
            {
                for (int x = 0; x < 100; x++)
                {
                    Console.Write('*');
                }
            });

            t.Wait();
        }

    }
}
Run Code Online (Sandbox Code Playgroud)
  • 此应用程序编译并运行显示空白屏幕(等待任务完成)
  • 任务保持等待状态
  • 没有输出显示/写入控制台
  • 为什么不?
  • 应用程序永久保持"等待"状态
  • 为什么?
  • 代码目标:启动新任务,等待任务完成,退出应用程序

c# console task wait task-parallel-library

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

组合任务会产生字典

我正在尝试并行化依赖外部资源的工作,并将其组合成一个结果字典.

为了说明我的需要,想象一下我想下载一组文件,并将每个结果放在一个字典中,其中键是url:

string[] urls = { "http://msdn.microsoft.com", "http://www.stackoverflow.com", "http://www.google.com" };

var fileContentTask = GetUrls(urls);

fileContentTask.Wait();

Dictionary<string, string> result = fileContentTask.Result;
// Do something
Run Code Online (Sandbox Code Playgroud)

但是,我能够编码GetUrls方法.我可以生成所有任务,但我没有找到如何在字典中合并结果:

static Task<Dictionary<string,string>> GetUrls(string[] urls)
{
    var subTasks = from url in urls
                   let wc = new WebClient()
                   select wc.DownloadStringTaskAsync(url);

    return Task.WhenAll(subTasks); // Does not compile
}
Run Code Online (Sandbox Code Playgroud)

如何将生成的任务合并到字典中?

c# task

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

使用等待和自制异步方法的问题

为什么返回a的方法Task在返回它的实例时不会被执行.我认为这必须发生,因为await方法/委托会将它放入某个队列,然后执行生成的任务.

那么为什么这Task在调用时永远不会被执行Do()

public void Do()
{
    SomeTask().Wait()
}

public async Task SomeTask()
{
    return new Task(() => { Console.WriteLine("Hello World!") });
}
Run Code Online (Sandbox Code Playgroud)

编辑

或者我需要await Task.Run(...)吗?

非常感谢你!

c# asynchronous task task-parallel-library async-await

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

C#Tasks.ContinueWith

我试图从异步方法执行两个不同的任务,但我的第二个任务应该从第一个任务开始.我试过使用ContinueWith但没有成功.这是我的示例代码:

class Program
{
    static List<string> GlobalList1 = null;
    static List<string> GlobalList2 = null;

    static void Main(string[] args)
    {
        Task firstTask = new Task(DoFirstThing);
        firstTask.Start();
        firstTask.Wait();

        Task secondTask = firstTask.ContinueWith(o => DoSecondThing(), TaskContinuationOptions.ExecuteSynchronously);
        secondTask.Wait();

        Console.ReadKey();
    }

    public async static void DoFirstThing()
    {
        Console.WriteLine("Doing first...");

        Task t = new Task(FirstThing);
        t.Start();

        await t;
    }

    public async static void DoSecondThing()
    {
        Console.WriteLine("Doing second...");

        Task t = new Task(SecondThing);
        t.Start();


        await t;
    }

    private async static void FirstThing()
    {
        Console.WriteLine("In First..");

        Task t …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous task continuewith

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

Ada中的多线程

我正在学习Ada,我在理解并发模型方面遇到了一些问题.以下测试应用程序应创建3个并行运行的任务,并简单地打印一系列数字.如果我没有使用任务,entry那么一切都很好,但如果我使用条目,则程序调用块并且根本不会发生并发.

我知道有可能实现互斥和同步执行,但我无法理解如何分离任务,甚至可能创建其中的几个.

q_multithreading.ads:

package Q_MULTITHREADING is

  task type TASK_LOOP is
  end TASK_LOOP;

  type TASK_LOOP_ACCESS is access TASK_LOOP;

  --===========================================================================

  task type TASK_ENTRY_LOOP is
    entry P_ITERATE(to : in Integer);
  end TASK_ENTRY_LOOP;

  type TASK_ENTRY_LOOP_ACCESS is access TASK_ENTRY_LOOP;

  --===========================================================================

  procedure P_EXECUTE_NO_ENTRY;

  procedure P_EXECUTE_ENTRY(to : in Integer);

end Q_MULTITHREADING;
Run Code Online (Sandbox Code Playgroud)

q_multithreading.adb:

with Ada.Text_IO;

package body Q_MULTITHREADING is

  V_ID_COUNTER : Integer := 1;

  --===========================================================================

  task body TASK_LOOP is

    V_ID : Integer := -1;

  begin

    V_ID := V_ID_COUNTER;
    V_ID_COUNTER := V_ID_COUNTER + 1;

    for i in …
Run Code Online (Sandbox Code Playgroud)

multithreading ada task

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

同时执行多个操作

我想使用异步任务同时执行多个循环(我不想使用Parallel.ForEach)

我做 :

static async void Run()
{
    await MultiTasks();
}

static async Task MultiTasks()
{
    var Loop1 = Loop1Async();
    var Loop2 = Loop2Async();

    await Loop1;
    await Loop2;
}

static async Task Loop1Async()
{
    for (int i = 0; i < 500; i++)
    {
        Console.WriteLine("Loop 1 : " + i);
    }
}

static async Task Loop2Async()
{
    for (int i = 0; i < 500; i++)
    {
        Console.WriteLine("Loop 2 : " + i);
    }
}
Run Code Online (Sandbox Code Playgroud)

Run() 在我的Main方法中调用.

但是这两个循环不会在同一时间执行.第一圈完成后,第二圈开始 …

c# task multitasking

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

C# - 如何为每个方法列表并行?

我有方法列表,需要并行化它们.如何在C#中做到这一点?我看到有一个Parallel命名空间?如何使用它?

method1()
method2()
method3()
method4()
Run Code Online (Sandbox Code Playgroud)

c# parallel-processing multithreading task parallel.foreach

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

任务<T>撤销结果的扩展方法

想知道,使用扩展方法是否会有任何问题Task<T>:

public static T Await<T>(this Task<T> task)
{
    var result = default(T);

    Task.Run(async () => result = await task).Wait();

    return result;
}
Run Code Online (Sandbox Code Playgroud)

对于那些你希望从a获得结果的实例来说,这似乎是一个不错的节省时间,Task但是你的方法没有标记async.

c# extension-methods task async-await

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