重用C#套接字BeginReceive的相同异步回调可能带来的负面影响是什么?

时间:2017-12-25 20:07:02

标签: c# sockets asynchronous

我想知道使用相同的异步回调的含义是什么,而不是每次调用BeginReceive时创建一个新的回调。这会产生异常,问题,不良行为吗?

例如:

client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
                     new AsyncCallback(ReceiveCallback), state);

AsyncCallback asyncCallback = new AsyncCallback(ReceiveCallback);
client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, asyncCallback, state);

假设创建新的异步回调不在BeginReceive旁边,只调用一次。

2 个答案:

答案 0 :(得分:1)

查看AsyncCallback docs,您会看到在示例中他们使用相同的实例,所以应该没问题。

如果你考虑它AsyncCallback基本上是一个delegate,它是某种方法的指针,异步操作需要在完成后调用一些东西,它真的不关心委托是否是重用或不重用,委托指向一些代码,这个回调将被执行。

答案 1 :(得分:0)

我过去使用过同一个,没有遇到任何问题。这应该不重要,因为它只是一个代表。