MSMQ - ReceiveCompleted - 处理消息异步

时间:2016-10-04 04:04:28

标签: c# asynchronous async-await msmq

我正在使用BeginnReceive方法和ReceiveCompleted事件处理程序来侦听和处理来自MSMQ的消息。

我已将BeginReceive方法放在ReceiveCompleted事件处理程序的开头。

看起来它在我的控制台应用程序中运行良好。 现在,消息是异步处理的。

问题: 这对于线程安全是否安全?
我看到的所有示例都将BeginReceive调用放到已完成的事件处理程序的末尾。所以我问自己在完成处理程序的最开头是否有任何问题?

<?xml version="1.0" encoding="utf-8"?>
<ImageView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/refresh"
    android:padding="10dp" />

1 个答案:

答案 0 :(得分:1)

是的,使用async / await的方法将安全地处理线程。使用这些关键字的异步方法将非常谨慎。 更具体地说我的回答是事件处理程序方法messagereceived(方法名称应该以异步方式结束)调用并等待async方法,如果在此方法中有任何阻塞工作,它将挂起的线程并进一步执行,直到其他工作完成并且返回,就像在这种情况下,processmessage async可能是阻塞的,并且可以进一步执行调用但是我没有看到你利用它,因为在调用processmessageasync之后你没有做任何事情,所以如果你问的话,线程会执行这个如果它是线程安全的,但异步方法没有得到充分利用