예제 #1
0
        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());
            }
        }