Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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# 在使用异步套接字方法时设置延迟_C#_Sockets_Asynchronous_Tcp Ip - Fatal编程技术网

C# 在使用异步套接字方法时设置延迟

C# 在使用异步套接字方法时设置延迟,c#,sockets,asynchronous,tcp-ip,C#,Sockets,Asynchronous,Tcp Ip,我正在使用C#,.Net Framework 3.5进行软件开发。我的应用程序通过TCP/IP一次连接到多个客户端,并从它们收集一些数据。客户人数非常多(超过100人)。在我的应用程序开发过程之前,我做了一些研究,发现我必须在性能和可管理性方面使用异步套接字实现 目前看来还可以,但我正在寻找最好的方法,在向客户发送数据之前延迟一段时间。我的应用程序有时需要等待大约2秒钟才能发送特定数据。现在,我只放了一个System.Threading.Thread.Sleep(2000)异步发送方法之前的代码

我正在使用C#,.Net Framework 3.5进行软件开发。我的应用程序通过TCP/IP一次连接到多个客户端,并从它们收集一些数据。客户人数非常多(超过100人)。在我的应用程序开发过程之前,我做了一些研究,发现我必须在性能和可管理性方面使用异步套接字实现


目前看来还可以,但我正在寻找最好的方法,在向客户发送数据之前延迟一段时间。我的应用程序有时需要等待大约2秒钟才能发送特定数据。现在,我只放了一个
System.Threading.Thread.Sleep(2000)异步发送方法之前的代码行。这是方便的方法还是有更好的方法?这个
Sleep
函数是阻止我的应用程序主线程还是只阻止异步套接字所属的线程。

我会使用一个匿名方法thread的计时器。睡眠(在大多数情况下)是邪恶的

这意味着括号内的代码将在2000毫秒后运行一次


timer.Dispose()
行非常重要,您可以拥有的未配置计时器的数量是有限制的。

我会使用带有匿名方法的计时器,而不是线程。睡眠(在大多数情况下)是邪恶的

这意味着括号内的代码将在2000毫秒后运行一次


timer.Dispose()
行非常重要,您可以拥有的未配置计时器数量是有限制的。

我们可以知道所需延迟的原因吗?故意拖延似乎有点奇怪in@AlastairPitts我之所以延迟是因为客户端机器在一些操作之后需要延迟。它们不会在几秒钟内响应任何命令。更好的替代方法是在客户端缓冲数据,并在客户端准备好后使用数据。asnyc tcp(或其他)客户端的发展方向。@Huseyinslu感谢您的想法。但缓冲与我的情况无关。我不需要缓冲任何东西,我只需要等待几秒钟,然后通过tcp发送数据。我寻找了一个内置的.NET解决方案,但我恐怕需要实现我自己的解决方案,这很可能是线程使用。我们可以知道所需延迟的原因吗?故意拖延似乎有点奇怪in@AlastairPitts我之所以延迟是因为客户端机器在一些操作之后需要延迟。它们不会在几秒钟内响应任何命令。更好的替代方法是在客户端缓冲数据,并在客户端准备好后使用数据。asnyc tcp(或其他)客户端的发展方向。@Huseyinslu感谢您的想法。但缓冲与我的情况无关。我不需要缓冲任何东西,我只需要等待几秒钟,然后通过tcp发送数据。我寻找了一个内置的.NET解决方案,但我担心我需要实现我自己的解决方案,这很可能是线程使用。我如何知道我可以有多少个未设置的计时器?这个数字与我的应用程序可以创建的线程数相同吗?实际上我想知道你的建议是否为等待操作创建了一个新线程。如果是这样,非常类似于Thread.Sleep方法,我想它会大大降低性能。在我执行的测试中,我认为大约有50-60个计时器可以同时处于活动状态,因此如果要发出100个请求,可能需要使用一些限制。是的,每个匿名方法都将在其自己的线程上执行,但该线程的生命周期很短,因为您对它所做的只是异步发送和Dispose。如果在线程上放置Thread.Sleep(2000),则可以保证它在其生命周期的大部分时间内都不会做任何有用的事情,但至少可以存活2000毫秒。好的,我相信您的解决方案比Thread.Sleep更好。然而,我认为会有一个比线程或计时器等待更好的解决方案。我认为可能存在SendAsync函数重载,它以某种方式接受延迟参数,并在内部发送数据之前等待延迟时间。这将是有用的。我如何知道我可以有多少个未设置的计时器?这个数字与我的应用程序可以创建的线程数相同吗?实际上我想知道你的建议是否为等待操作创建了一个新线程。如果是这样,非常类似于Thread.Sleep方法,我想它会大大降低性能。在我执行的测试中,我认为大约有50-60个计时器可以同时处于活动状态,因此如果要发出100个请求,可能需要使用一些限制。是的,每个匿名方法都将在其自己的线程上执行,但该线程的生命周期很短,因为您对它所做的只是异步发送和Dispose。如果在线程上放置Thread.Sleep(2000),则可以保证它在其生命周期的大部分时间内都不会做任何有用的事情,但至少可以存活2000毫秒。好的,我相信您的解决方案比Thread.Sleep更好。然而,我认为会有一个比线程或计时器等待更好的解决方案。我认为可能存在SendAsync函数重载,它以某种方式接受延迟参数,并在内部发送数据之前等待延迟时间。这将是有用的。
System.Threading.Timer timer;
timer = new Timer((cs) =>
    {
        ...asynchronous send here
        timer.Dispose();
    }, null, 2000, Timeout.Inifinite);