草庐IT

task-switching

全部标签

c# - 'await' 有效,但调用 task.Result 挂起/死锁

我有以下四个测试,最后一个在我运行时挂起。为什么会这样:[Test]publicvoidCheckOnceResultTest(){Assert.IsTrue(CheckStatus().Result);}[Test]publicasyncvoidCheckOnceAwaitTest(){Assert.IsTrue(awaitCheckStatus());}[Test]publicasyncvoidCheckStatusTwiceAwaitTest(){Assert.IsTrue(awaitCheckStatus());Assert.IsTrue(awaitCheckStatus())

c# - 关于 Task.Start() 、 Task.Run() 和 Task.Factory.StartNew() 的用法

我刚刚看到3个关于TPL使用的例程,它们做同样的工作;这是代码:publicstaticvoidMain(){Thread.CurrentThread.Name="Main";//Createataskandsupplyauserdelegatebyusingalambdaexpression.TasktaskA=newTask(()=>Console.WriteLine("HellofromtaskA."));//Startthetask.taskA.Start();//Outputamessagefromthecallingthread.Console.WriteLine("Hel

c# - 使用 Case/Switch 和 GetType 来确定对象

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:C#-Isthereabetteralternativethanthisto‘switchontype’?如果您想切换一种对象,最好的方法是什么?代码片段privateintGetNodeType(NodeDTOnode){switch(node.GetType()){casetypeof(CasusNodeDTO):return1;casetypeof(BucketNodeDTO):return3;casetypeof(BranchNodeDTO):return0;casetypeof(LeafNodeDTO

c# - Parallel.ForEach 与 Task.Run 和 Task.WhenAll

使用Parallel.ForEach或Task.Run()异步启动一组任务有什么区别?版本1:Liststrings=newList{"s1","s2","s3"};Parallel.ForEach(strings,s=>{DoSomething(s);});版本2:Liststrings=newList{"s1","s2","s3"};ListTasks=newList();foreach(varsinstrings){Tasks.Add(Task.Run(()=>DoSomething(s)));}awaitTask.WhenAll(Tasks); 最佳

c# - 等待 vs Task.Wait - 死锁?

我不太明白Task.Wait和await之间的区别。我在ASP.NETWebAPI服务中有类似于以下功能的东西:publicclassTestController:ApiController{publicstaticasyncTaskFoo(){awaitTask.Delay(1).ConfigureAwait(false);return"";}publicasyncstaticTaskBar(){returnawaitFoo();}publicasyncstaticTaskRos(){returnawaitBar();}//GETapi/testpublicIEnumerableGe

c# - C# 中 Task.FromResult<TResult> 有什么用

在C#和TPL(TaskParallelLibrary)中,Task类表示正在进行的工作,它会产生T类型的值。我想知道Task.FromResult需要什么方法?即:在手边已经有了生产值的场景下,还需要将其包装回Task中吗?唯一想到的是它被用作其他接受任务实例的方法的适配器。 最佳答案 我发现了两个常见的用例:当您实现一个允许异步调用者的接口(interface),但您的实现是同步的。当您stub/模拟异步代码以进行测试时。 关于c#-C#中Task.FromResult有什么用,我们

c# - 我什么时候使用 Task.Yield()?

我经常使用async/await和Task但从未使用过Task.Yield()老实说,即使有所有解释,我也不明白为什么我需要这种方法。有人可以给出一个需要Yield()的好例子吗? 最佳答案 当您使用async/await时,无法保证您在执行awaitFooAsync()时调用的方法会实际运行异步地。内部实现可以使用完全同步的路径自由返回。如果您正在制作一个API,其中不阻塞是至关重要的并且您异步运行一些代码,并且被调用的方法有可能同步运行(有效阻塞),使用awaitTask.Yield()将强制您的方法是异步的,并在此时返回控制。

c# - 在 C# 中使用 if/else 和 switch-case 之间有什么显着区别吗?

在C#中使用switch语句与使用if/else语句有什么好处/坏处。除了代码的外观之外,我无法想象会有那么大的不同。是否有任何原因导致生成的IL或相关的运行时性能会截然不同?相关:Whatisquicker,switchonstringorelseifontype? 最佳答案 SWITCH语句仅在调试或兼容模式下生成与IF相同的程序集。在发布时,它将被编译成跳转表(通过MSIL'switch'语句)-这是O(1)。C#(与许多其他语言不同)也允许打开字符串常量-这有点不同。为任意长度的字符串构建跳转表显然是不切实际的,因此大多数情

c# - Task.Start/Wait 和 Async/Await 之间有什么区别?

我可能遗漏了一些东西,但这样做有什么区别:publicvoidMyMethod(){Taskt=Task.Factory.StartNew(DoSomethingThatTakesTime);t.Wait();UpdateLabelToSayItsComplete();}publicasyncvoidMyMethod(){varresult=Task.Factory.StartNew(DoSomethingThatTakesTime);awaitresult;UpdateLabelToSayItsComplete();}privatevoidDoSomethingThatTakesTi

c# - 何时正确使用 Task.Run 以及何时使用 async-await

我想请教您对何时使用Task.Run的正确架构的看法。我在WPF.NET4.5中遇到滞后的UI应用程序(使用CaliburnMicro框架)。基本上我在做(非常简化的代码片段):publicclassPageViewModel:IHandle{...publicasyncvoidHandle(SomeMessagemessage){ShowLoadingAnimation();//MakesUIverylaggy,butstillnotdeadawaitthis.contentLoader.LoadContentAsync();HideLoadingAnimation();}}publ