关于asynchronious sockets
,我想知道在发送所有数据之前是否可以保留该线程?
public IAsyncResult BeginSend(
byte[] buffer,
int offset,
int size,
SocketFlags socketFlags,
AsyncCallback callback,
Object state
我在buffer参数中发送数据。我想知道是否有可能阻止线程在所有数据真正从这里发送之前如何(不考虑是否在另一方接收数据)?所以我可以调用Socket.BeginReceive
方法吗?
-
使用ManualResetEvent
委托(我称之为“sendDone”)是否足够好?
示例:
private static ManualResetEvent sendDone = new ManualResetEvent(false);
//inisde a method call WaitOne() method:
sendDone.WaitOne();
这够好吗?或者有更好的改变吗?
为ans
答案 0 :(得分:0)
最简单的方法是使用Send
method上的Socket
class,因为它会阻止调用线程,如下所示:
byte[] buffer = ...;
int bytesSent = socket.Send(bytes);
请注意,如果您真的想要阻止对BeginSend的调用,可以使用任务并行库来创建Task<TResult>
,然后您可以等待,如下所示:
Task<int> task = Task.Factory.FromAsync(
socket.BeginSend(buffer, offset, size, socketFlags, null, null),
socket.EndSend);
// Wait on the task.
task.Wait();
// Get the result.
// Note, you can omit the call to wait above, the call to
// Result will block.
int bytesSent = task.Result;