草庐IT

zh-cn_task

全部标签

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

c# - 您是否必须将 Task.Run 放入方法中以使其异步?

我试图以最简单的形式理解异步等待。为了这个例子,我想创建一个非常简单的方法来添加两个数字,当然,它根本没有处理时间,只是在这里制定一个例子。示例1privateasyncTaskDoWork1Async(){intresult=1+2;}例子2privateasyncTaskDoWork2Async(){Task.Run(()=>{intresult=1+2;});}如果我等待DoWork1Async()代码是同步运行还是异步运行?我需要用Task.Run包装同步代码吗?使方法可等待且异步,以免阻塞UI线程?我想弄清楚我的方法是否是Task或返回Task我需要用Task.Run包装代码

c# - 什么时候用Task.Delay,什么时候用Thread.Sleep?

关于何时使用Task.Delay是否有好的规则?与Thread.Sleep?具体来说,是否有最低值(value)可以让一个比另一个有效/高效?最后,由于Task.Delay会导致异步/等待状态机上的上下文切换,使用它是否会产生开销? 最佳答案 使用Thread.Sleep当你想阻塞当前线程时。使用awaitTask.Delay当您想要逻辑延迟而不阻塞当前线程时。效率不应该是这些方法的首要问题。它们在现实世界中的主要用途是作为I/O操作的重试计时器,以秒而不是毫秒为单位。 关于c#-什么时

c# - 异步等待 Task<T> 超时完成

我想等待Task完成一些特殊规则:如果它在X毫秒后仍未完成,我想向用户显示一条消息。如果在Y毫秒后还没有完成,我想自动requestcancellation.我可以使用Task.ContinueWith异步等待任务完成(即安排在任务完成时执行的操作),但这不允许指定超时。我可以使用Task.Wait同步等待任务超时完成,但这会阻塞我的线程。如何异步等待任务完成并超时? 最佳答案 这个怎么样:inttimeout=1000;vartask=SomeOperationAsync();if(awaitTask.WhenAny(task,T

c# - 如果我的接口(interface)必须返回 Task 什么是无操作实现的最佳方法?

在下面的代码中,由于接口(interface)的原因,LazyBar类必须从其方法返回一个任务(并且为了参数的缘故不能更改)。如果LazyBar的实现不寻常,因为它恰好快速同步运行-从该方法返回无操作任务的最佳方法是什么?我已经使用了下面的Task.Delay(0),但是我想知道如果该函数被称为lot是否有任何性能副作用(为了论证,每秒说数百次):这种句法糖分会产生重大影响吗?它是否开始堵塞我的应用程序的线程池?编译器是否足以以不同方式处理Delay(0)?returnTask.Run(()=>{});会有什么不同吗?有没有更好的办法?usingSystem.Threading.Tas

c# - 我将如何同步运行异步 Task<T> 方法?

我正在学习async/await,遇到需要同步调用异步方法的情况。我该怎么做?异步方法:publicasyncTaskGetCustomers(){returnawaitService.GetCustomersAsync();}正常使用:publicasyncvoidGetCustomers(){customerList=awaitGetCustomers();}我试过使用以下方法:Tasktask=GetCustomers();task.Wait()Tasktask=GetCustomers();task.RunSynchronously();Tasktask=GetCustomer

google-app-engine - 我可以通过queue.yaml配置延迟包使用的Task Queue吗?

其实都在主题中:当使用Go非常方便的延迟包时,我是否仍然可以上传一个queue.yaml文件并为“内置”队列配置限制等?如果是这样,队列名称是否只是“延迟”?还有其他限制吗? 最佳答案 我自己还没有尝试过,但是thispage说:Thedefaultqueueispreconfiguredwithathroughputrateof5taskinvocationspersecond.Ifyouwanttochangethepreconfiguredsettings,simplydefineaqueuenameddefaultinque

戈朗 : how to handle blocking tasks optimally?

众所周知,goroutine是同步但非阻塞的处理单元。golang调度程序处理非阻塞任务,例如来自字符设备的套接字、定时器、信号或其他事件非常好。但是block设备io或CPU敏感任务怎么样?它们在完成之前不能被打断,也不能被多路复用。运行goroutine的OS线程将卡住,直到goroutine返回或让步。在这种情况下,调度粒度会变差。当然,您可以在代码中将任务拆分为更小的子任务,例如,不要一次复制1GB的文件,而是先复制10MB,让出,再复制另外10MB等,这样同一操作系统线程中的其他goroutines有机会运行。CPU密集型任务的另一个示例:逐个压缩文件并最终合并它们。但这破坏

json - VS Code tasks.json——任务单独工作,但不组合

这让我抓狂(抓狂!)。构建/运行文件正确,fmt命令正确。但是,如果我尝试合并到一个任务文件中,它就会停止工作。这两个独立运行良好,并且按照我想要的方式运行:任务.json{"version":"0.1.0","isShellCommand":true,"showOutput":"always","command":"go","taskName":"build","args":["build","-o","${workspaceRoot}.exe","&&","${workspaceRoot}.exe"],"isBuildCommand":true}任务.json{"version":