Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MSDN中的异步客户端套接字示例_C#_Sockets_Asynchronous_Msdn - Fatal编程技术网

C# MSDN中的异步客户端套接字示例

C# MSDN中的异步客户端套接字示例,c#,sockets,asynchronous,msdn,C#,Sockets,Asynchronous,Msdn,我有一个关于这个例子的问题:。 它表示操作是异步的,它们是(提供了beginxxx/endxxx),但它们使用ManualResetEvent,如果我正确理解示例代码,则此类调用: Receive(client); receiveDone.WaitOne(); 将阻止线程,它们是从中调用的。所以,若我有一个带有UI的应用程序,并且我从主线程调用那个异步套接字代码,那个么应用程序将冻结……或者我错了?抱歉,我希望在不冻结主线程的情况下通过tcp异步发送/接收一些命令。我是否需要调用该样本

我有一个关于这个例子的问题:。 它表示操作是异步的,它们(提供了beginxxx/endxxx),但它们使用
ManualResetEvent
,如果我正确理解示例代码,则此类调用:

  Receive(client);
  receiveDone.WaitOne();

将阻止线程,它们是从中调用的。所以,若我有一个带有UI的应用程序,并且我从主线程调用那个异步套接字代码,那个么应用程序将冻结……或者我错了?抱歉,我希望在不冻结主线程的情况下通过tcp异步发送/接收一些命令。我是否需要调用该样本中的所有套接字操作以避免冻结

它会阻塞用户界面。MSDN示例确实演示了异步,但非常糟糕。它也很原始。请看我刚才回答的关于不同异步编程模型的主题。我讨论了很多问题,并提供了所有这些问题的完整示例链接


链接:

是的,此代码设置为同步运行。但是,您可以自己轻松地使用Beginxxx和Endxxx调用,而不是在编写异步操作的这个(糟糕的)示例时包装它们

为了进一步澄清,本文确实异步运行了每个方法,但随后使用
blocker.WaitOne()阻塞更好的方法可能是让您的beginconnect回调触发发送,而它的回调触发接收,等等


您还可以使用并利用其功能来执行此操作。然后,您的代码可能看起来更干净:)

谢谢大家的回答。我担心我问了一些愚蠢的问题,结果证明我理解正确@大卫·安德森,谢谢你的例子@0x49D1这通常是正确的,但就像生活中的每件事一样,你永远不应该仅仅因为某件事来自某个特定的地方就同意它(而你没有,这很好:)。此外,MSDN文章通常是由外部人员编写的(我在这里看不到),因此它并不总是直接来自Redmond。该示例适用于控制台应用程序。我认为这在GUI应用程序中更有意义,因为您可以让Receive回调绘制视图更新,而Send函数只在单击按钮(或其他事件)时调用。本例中阻塞的唯一原因是确保连接、发送、接收、关闭的线性事件,并防止程序在回调完成之前退出。