问题标签 [waitone]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 超时结束后触发事件
我必须等待触发事件。我最初的解决方案是使用AutoResetEvent
and WaitOne()
,但事件总是在等待超时结束后触发。所以我回到了下面的方法,但我仍然有同样的问题。超时结束后 2 或 3 秒,无论超时是什么,都会触发事件。
这是事件处理程序代码:
事件本身由调用上述函数的另一个函数触发。基本上它看起来像这样:
有谁知道导致这个问题的原因以及我该如何解决?
编辑:不再相关。转发了 OnResponseArrived 事件,因为我没有及时找到其他解决方案。
c# - 如何解除对 AutoResetEvent 对象调用 WaitOne 方法的线程的阻塞?
下面是一个具有“SomeMethod”方法的类,它说明了我的问题。
该方法被设计为线程安全的,将在不同的线程中调用。现在我的问题是,如何在任何时候解除对“theEvent”对象调用“WaitOne”方法的所有线程的阻塞?这个要求经常出现在我的设计中,因为我需要能够优雅地停止和启动我的多线程程序。在我看来,启动一个多线程程序相当简单,但要停止一个程序却很棘手。
这是我迄今为止尝试过的显然有效的方法。但这是标准方法吗?
“UnblockAll”方法是“SomeClass”类的成员。此处使用的技术基于WaitOne 方法的 MSDN 文档。我引用了以下文档的相关部分:
如果毫秒超时为零,则该方法不会阻塞。它测试等待句柄的状态并立即返回。
在 do..while 循环中,我调用Set 方法。这会释放一个可能由于调用 WaitOne 方法而阻塞的线程(编码在“SomeMethod”方法中)。接下来我测试“theEvent”对象的状态,以了解它是否已发出信号。该测试是通过调用带有超时参数的 WaitOne 方法的重载版本来完成的。我在调用 WaitOne 方法时使用的参数为零,根据文档,这会导致调用立即返回一个布尔值。如果返回值为真,则“theEvent”对象为处于信号状态。如果在“SomeMethod”方法中调用“WaitOne”方法时至少有一个线程被阻塞,则对“Set”方法的调用(编码在“UnblockAll”方法中)将解除阻塞。因此,在“UnblockAll”方法中的 do..while 语句末尾调用“WaitOne”方法将返回 false。仅当没有线程阻塞时,返回值才为真。
上述推理是否正确,如果正确,该技术是否是处理我的问题的标准方法?我正在尝试主要在 .net compact-framework 2.0 平台上使用该解决方案。
windows-phone-7 - 如何等待响应并对其进行操作?
我有一个新问题。我想对响应做一些操作,但我得到一个 NullReferenceException,因为它还没有到达......这是我的代码:
但是当我使用 ManualResetEvent 类时,我的应用程序只是挂起,因为 if(dataReady.WaitOne()) 行。以下是 ManualResetEvent 类的完整代码:
所以,我的问题是:如何等待响应并对其进行操作? (我尝试使用 Application.DoEvent 方法,但它在 WP7 中不存在......)
c# - Webservice:AsyncCall 已完成:但 WaitOne() 仍在等待
- 我正在通过命令行 Exe 调用 WebService 方法。
- 此方法调用是异步调用,我在调用后使用 WaitOne。
- 我正在完成的方法中执行 ManualRest.Set()。
在异步方法在 10-20 分钟内返回的情况下,上述设置在 99% 的情况下都能正常工作,
当异步调用需要更多时间(例如 2-3 小时)然后未执行 WaitOne() 之后的代码时,就会出现问题。
我在 waitone() 之前和之后以及 Completed 事件中都写了日志,但是在 3 小时的异步调用之后,控件似乎没有恢复。
上面的任何帮助/指针...
谢谢。
asynchronous - 在 ServiceBus 上使用 BeginReceive 和 EndReceive 发送消息对我不起作用
我需要在总线上进行异步消息传递。
这是我正在使用的代码:
这是异步获取:
我得到的输出是:
它说那行 result.AsyncWaitHandle.WaitOne(); 正如我认为的那样,直到 AsyncGet 的线程完成后才停止执行。请告诉我我在这里做错了什么。谢谢!
windows-phone-7 - WP7 和 Skydrive WaitOne 阻止一切
我正在尝试从 SkyDrive 下载文件并将异步调用包装在同步类中。然而,当我打电话给 WaitOne 时,一切都被阻止了,EventHandeler 永远不会被调用。
c# - 子线程完成后主线程不继续
我正在尝试在我的应用程序中使用多线程。该方法test5
尝试从 Internet 获取一些内容,而main
线程在继续其他工作之前等待所有线程完成。
但是我的main
线程在调用后没有回来test5
,我的控制台线Done Inside!!
也thread all got back!!
永远不会到达。
我该如何解决这个问题?
c# - 即使所有事件都已触发,WaitOne() 也会永远等待
Threaded 应该创建 4 个单独的线程并等待它们中的每一个直到它们完成。每个线程都会休眠一段时间,并且仅当共享的 Mutex opbject 未被另一个线程占用时才终止,然后通过一个事件发出信号表明它已完成(这是我的代码的简化版本,但在同一位置失败)
但是发生的情况是,大多数时候主线程将永远等待 WaitOne() 看似随机的一个。
此外,我不得不注释掉我的代码的某些部分,因为它会导致更多意想不到的行为(即,在每个线程完成后,主线程会以某种方式跳回 for 子句并导致 IndexOutOfBounds)
任何帮助都会很棒
c# - 如何使用 WaitHandle 等待异步调用完成?
考虑这段代码:
我们有结果:
所以,我想要结果:
我怎么能async
在这段代码中等待?我查看了 MSDN 文章“异步调用同步方法”,发现:
调用后,BeginInvoke
您可以执行以下操作:
- 做一些工作,然后调用
EndInvoke
阻塞直到调用完成。 WaitHandle
使用该IAsyncResultAsyncWaitHandle
属性获取 a ,使用其WaitOne
方法阻止执行,直到
WaitHandle
发出信号,然后调用EndInvoke
.- 轮询
IAsyncResult
返回的 byBeginInvoke
以确定异步调用何时完成,然后调用EndInvoke
. - 将回调方法的委托传递给
BeginInvoke
. 当异步调用完成时,该方法在ThreadPool
线程上执行。回调方法调用EndInvoke
.
我认为这一秒对我来说更好。但是如何实现呢?特别是我对重载感兴趣WaitOne()
(阻塞当前线程,直到当前 WaitHandle 收到信号)。如何正确地做到这一点?我的意思是这种情况下的常见模式。
更新:
现在我使用Task<T>
:
SomeMethod()
这是空的主要问题list
。
结果:
现在我有可怕的解决方案:(
结果:
这就是我需要等待异步调用的原因。我如何Wait
在Task
这里使用?
更新 2:
c# - 如何最好地处理因 AutoResetEvent.WaitOne() 而处于休眠状态的线程
我有一个 Windows 服务,它以 5 个线程之一发送电子邮件(这样做是为了提高服务发送电子邮件的速度):
我有一种Queue
方法可以将一条或多条新消息添加到 messageQueue 并调用block.Set()
,以便 5 个线程之一可以发送消息。当允许其中一个线程运行时,只要队列中有消息,block.Set()
就会调用,以便下一条消息可以出队,并且 5 个线程中的另一个将工作发送它。以此类推,直到队列为空。这一切正常。
但是,当我处理我的对象时,我设置了处理变量,然后为每个线程:
大多数情况下,线程由于 s 而处于休眠状态block.WaitOne
,因此上面的代码中止了线程。但是,这会导致记录线程中止异常。我可以将线程中止异常与其他异常分开捕获并选择不记录,但这似乎不是很干净。
在不导致过多日志记录的情况下清理这些线程的最佳方法是什么?
更新:
我已将以上内容更改为:
谢谢您的帮助。