2 回答
TA贡献1818条经验 获得超7个赞
试试这个:
var query =
Observable
.Using(
() => new UdpClient(new IPEndPoint(IPAddress.Any, 20000)),
udpServer =>
Observable
.Defer(() =>
Observable
.FromAsync(() => udpServer.ReceiveAsync()))
.Repeat());
您需要使用来管理IDispose资源,.Using并且需要.Repeat致电FromAsync。
的FromAsyncPattern是现在已经过时。
如果您需要使用过时的方法,FromAsyncPattern请执行以下操作:
var query =
Observable
.Using(
() => new UdpClient(20000),
udpServer =>
Observable
.Defer(() =>
Observable
.FromAsyncPattern(udpServer.BeginReceive, t => udpServer.EndReceive(t, ref remoteEP)))
.Repeat());
TA贡献1744条经验 获得超4个赞
这是因为观察者在给定的集合上工作。从返回的集合BeginReceive
不同于再次调用它。使用您显示的代码,我并不惊讶它只能运行一次。您需要提供一个一致的缓冲区BeginReceive
,然后向该缓冲区预订观察者,因为它每次都会触发。也就是说,缓冲区在两次调用之间必须是相同的实例。
- 2 回答
- 0 关注
- 199 浏览
添加回答
举报