草庐IT

dispatch_semaphore_wait

全部标签

c# - C# 中的双重分派(dispatch)?

我听过/读过这个词,但不太明白它的意思。我应该在什么时候使用这种技术以及如何使用它?谁能提供一个好的代码示例? 最佳答案 访问者模式是一种以面向对象的方式进行双重调度的方式。当您想根据运行时的类型而不是编译时的类型为给定参数选择使用哪种方法时,它很有用。双重dispatch是多重dispatch的特例。当您在一个对象上调用一个虚拟方法时,这被认为是单分派(dispatch),因为调用哪个实际方法取决于单个对象的类型。对于双重分派(dispatch),对象的类型和方法唯一参数的类型都会被考虑在内。这类似于方法重载决策,不同之处在于参数

c# - .Wait() 和 .GetAwaiter().GetResult() 有什么区别?

我的方法返回Task。我想等到它完成。我应该用什么.Wait()还是.GetAwaiter().GetResult()?它们有什么区别? 最佳答案 两者都是同步等待操作结果(您应该尽可能避免这些)。区别主要在于处理异常。使用Wait时,异常堆栈跟踪不会改变并代表异常发生时的实际堆栈,因此如果您有一段代码在线程池线程上运行,您将拥有像这样堆叠ThreadPoolThread.RunTaskYourCode.SomeWork另一方面,.GetAwaiter().GetResult()将重新处理堆栈跟踪以考虑所有异步上下文,忽略部分代码在

c# - Dispatcher.BeginInvoke : Cannot convert lambda to System. 委托(delegate)

我正在尝试调用System.Windows.Threading.Dispatcher.BeginInvoke。该方法的签名是这样的:BeginInvoke(Delegatemethod,paramsobject[]args)我试图向它传递一个Lambda而不是必须创建一个委托(delegate)。_dispatcher.BeginInvoke((sender)=>{DoSomething();},newobject[]{this});它给我一个编译器错误,说我can'tconvertthelambdatoaSystem.Delegate.委托(delegate)的签名以一个对象为参数,

c# - 是否建议将 prevTask.Wait() 与 ContinueWith(来自任务库)一起使用?

所以最近有人告诉我,我将.ContinueWith用于任务的方式并不是使用它们的正确方式。我还没有在互联网上找到这方面的证据,所以我会问你们,看看答案是什么。这是我如何使用.ContinueWith的示例:publicTaskDoSomething(){returnTask.Factory.StartNew(()=>{Console.WriteLine("Step1");}).ContinueWith((prevTask)=>{Console.WriteLine("Step2");}).ContinueWith((prevTask)=>{Console.WriteLine("Step3

c# - 这种类型的 CollectionView 不支持从不同于 Dispatcher 线程的线程更改其 SourceCollection

这个问题在这里已经有了答案:HowdoIupdateanObservableCollectionviaaworkerthread?(7个答案)关闭2年前。我有一个DataGrid,它通过异步方法从ViewModel填充数据。我的DataGrid是:我正在使用http://www.amazedsaint.com/2010/10/asynchronous-delegate-command-for-your.html在我的View模型中实现异步方式。这是我的View模型代码:publicclassMainWindowViewModel:WorkspaceViewModel,INotifyCo

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# - Selenium C# WebDriver : Wait until element is present

我想确保在webdriver开始执行操作之前存在一个元素。我正在尝试让这样的东西工作:WebDriverWaitwait=newWebDriverWait(driver,newTimeSpan(0,0,5));wait.Until(By.Id("login"));我主要是在纠结如何设置匿名函数... 最佳答案 使用solutionprovidedbyMikeKwan可能会对整体测试性能产生影响,因为隐式等待将用于所有FindElement调用。很多时候您会希望FindElement在元素不存在时立即失败(您正在测试格式错误的页面、缺

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# - 同步等待一个异步操作,Wait()为什么会在这里卡住程序

前言:我正在寻找一个解释,而不仅仅是一个解决方案。我已经知道解决方案了。尽管我花了几天时间研究有关基于任务的异步模式(TAP)、async和await的MSDN文章,但我仍然对一些更精细的细节感到有点困惑。我正在为Windows应用商店应用程序编写一个记录器,我想同时支持异步和同步日志记录。异步方法遵循TAP,同步方法应隐藏所有这些,并像普通方法一样看起来和工作。这是异步日志的核心方法:privateasyncTaskWriteToLogAsync(stringtext){StorageFolderfolder=ApplicationData.Current.LocalFolder;S

jquery - 在用户不移动鼠标的情况下将浏览器光标从 "wait"获取到 "auto"

我使用此jQuery代码在Ajax调用期间将鼠标指针设置为忙碌状态(沙漏)...$('body').css('cursor','wait');和这个相应的代码将其设置回正常...$('body').css('cursor','auto');这在某些浏览器上工作得很好......在Firefox和IE上,只要我执行命令,鼠标光标就会改变。这就是我想要的行为。在Chrome和Safari上,鼠标光标不会明显地从“忙碌”变为“自动”,直到用户移动指针。让不情愿的浏览器切换鼠标指针的最佳方法是什么? 最佳答案 目前这两个浏览器都存在错误。两