public async ValueTask <int> SendAsync(object message, params IPEndPoint[] ips) { if (ips == null) { throw new ArgumentNullException(nameof(ips)); } var length = ips.Length; if (length == 0) { throw new ArgumentNullException(nameof(ips)); } using (var owner = MessagePipeline.Pack(0, message)) { if (MemoryMarshal.TryGetArray <byte>(owner.Memory, out var buffer) == false) { return(0); } var tasks = new Task <int> [ips.Length]; var data = buffer.Array; var count = buffer.Count; for (int i = 0; i < length; ++i) { tasks[i] = this.Udp.SendAsync(data, count, ips[i]); } var retData = await Task.WhenAll(tasks); return(retData.Sum()); } }