草庐IT

c# - .NET 4 任务类教程

.NET4有一个类-Task.它非常有趣,我想开始使用它。例如,我想创建一个非常简单的基于任务的文件下载器,能够在每次下载时取消。谁能向我介绍一些这样做的示例代码?我想要一个正在运行的任务列表,并且希望能够取消其中的任何任务。附言代码示例可能无法运行我只是想知道如何以最佳方式使用这些东西。 最佳答案 如果你希望能够取消一个或多个任务,你需要创建一个CancellationTokenSource并将这个的CancellationToken传递给每个Task。如果必须使用相同的操作取消所有Task,则它们可以共享相同的token。如果每

c# - Task.WhenAny - 剩余的运行任务会怎样?

我有以下代码:List>tasks=tasksQuery.ToList();while(tasks.Any()){TaskcompletedTask=awaitTask.WhenAny(tasks);if(awaitcompletedTask)returntrue;tasks.Remove(completedTask);}它并行启动任务。当第一个完成的任务返回true时,该方法返回true。我的问题是:所有已启动且可能仍在后台运行的剩余任务会怎样?这是执行异步、并行且应在第一个条件出现后返回的代码的正确方法,还是逐个启动它们并单独等待更好? 最佳答案

c# - Task.WhenAny - 剩余的运行任务会怎样?

我有以下代码:List>tasks=tasksQuery.ToList();while(tasks.Any()){TaskcompletedTask=awaitTask.WhenAny(tasks);if(awaitcompletedTask)returntrue;tasks.Remove(completedTask);}它并行启动任务。当第一个完成的任务返回true时,该方法返回true。我的问题是:所有已启动且可能仍在后台运行的剩余任务会怎样?这是执行异步、并行且应在第一个条件出现后返回的代码的正确方法,还是逐个启动它们并单独等待更好? 最佳答案

c# - 在 LINQ 语句中使用 async/await 时实际发生了什么?

下面的代码片段可以编译,但我希望它等待任务结果而不是给我List>.varfoo=bars.Select(asyncbar=>awaitBaz(bar)).ToList()正如指出的那样here,你需要使用Task.WhenAll:vartasks=foos.Select(asyncfoo=>awaitDoSomethingAsync(foo)).ToList();awaitTask.WhenAll(tasks);但是acomment指出async和await在Select()里面不需要:vartasks=foos.Select(foo=>DoSomethingAsync(foo)).

c# - 在 LINQ 语句中使用 async/await 时实际发生了什么?

下面的代码片段可以编译,但我希望它等待任务结果而不是给我List>.varfoo=bars.Select(asyncbar=>awaitBaz(bar)).ToList()正如指出的那样here,你需要使用Task.WhenAll:vartasks=foos.Select(asyncfoo=>awaitDoSomethingAsync(foo)).ToList();awaitTask.WhenAll(tasks);但是acomment指出async和await在Select()里面不需要:vartasks=foos.Select(foo=>DoSomethingAsync(foo)).

c# - 为什么 Task.Delay 在这种情况下不起作用

我正在测试async,我发现了这种我无法理解的情况:varwatch=Stopwatch.StartNew();vart1=Task.Factory.StartNew(async()=>{awaitTask.Delay(2000);return2;});vart2=Task.Factory.StartNew(()=>{Task.Delay(1000);return1;});awaitTask.WhenAll(t1,t2);varresult=watch.ElapsedMilliseconds;我很想明白为什么结果总是0!为什么不是1000、2000或两个任务的总和3000?为什么Tas

c# - 为什么 Task.Delay 在这种情况下不起作用

我正在测试async,我发现了这种我无法理解的情况:varwatch=Stopwatch.StartNew();vart1=Task.Factory.StartNew(async()=>{awaitTask.Delay(2000);return2;});vart2=Task.Factory.StartNew(()=>{Task.Delay(1000);return1;});awaitTask.WhenAll(t1,t2);varresult=watch.ElapsedMilliseconds;我很想明白为什么结果总是0!为什么不是1000、2000或两个任务的总和3000?为什么Tas

ERROR Executor: Exception in task 0.0 in stage 1.0 (TID 1)Long cannot be cast to java.lang.String

问题尝试使用spark写入Hbase报错这是报错行,rowkey的id这个字段是我使用sparkSQL自带的函数临时添加的,打印schema发现是long类型原因javaLong类型好像不能getAs为String,所以报错了解决将这个字段转换为String再次尝试

c# - 从多个线程等待相同的任务是否可以 - 等待线程安全吗?

等待线程安全吗?似乎Task类是线程安全的,所以我猜等待它也是线程安全的,但我没有在任何地方找到确认。线程安全也是自定义等待程序的要求-我的意思是IsCompleted、GetAwaiter等方法?IE。如果这些方法不是线程安全的,await是线程安全的吗?不过,我不希望很快就需要自定义服务员。用户场景示例:假设我有一个异步返回结果的后台任务,然后从多个线程使用该结果:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Threading.Tasks;namespacescratch1{cla

c# - 从多个线程等待相同的任务是否可以 - 等待线程安全吗?

等待线程安全吗?似乎Task类是线程安全的,所以我猜等待它也是线程安全的,但我没有在任何地方找到确认。线程安全也是自定义等待程序的要求-我的意思是IsCompleted、GetAwaiter等方法?IE。如果这些方法不是线程安全的,await是线程安全的吗?不过,我不希望很快就需要自定义服务员。用户场景示例:假设我有一个异步返回结果的后台任务,然后从多个线程使用该结果:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Threading.Tasks;namespacescratch1{cla