/// <summary>异步发送数据并等待响应</summary> /// <param name="session">会话</param> /// <param name="buffer"></param> /// <returns></returns> public static async Task <Byte[]> SendAsync(this ISocketRemote session, Byte[] buffer) { var pk = new Packet(buffer); var rs = await session.SendAsync(pk).ConfigureAwait(false); return(rs?.ToArray()); }
/// <summary>异步多次发送数据</summary> /// <param name="session">会话</param> /// <param name="buffer"></param> /// <param name="times"></param> /// <param name="msInterval"></param> /// <returns></returns> public static Boolean SendAsync(this ISocketRemote session, Byte[] buffer, Int32 times, Int32 msInterval) { if (times <= 1) { return(session.SendAsync(buffer)); } if (msInterval < 10) { for (int i = 0; i < times; i++) { session.SendAsync(buffer); } return(true); } //var src = new TaskCompletionSource<Int32>(); var timer = new TimerX(s => { session.SendAsync(buffer); //session.Send(buffer); // 如果次数足够,则把定时器周期置空,内部会删除 var t = s as TimerX; if (--times <= 0) { t.Period = 0; //src.SetResult(0); } }, null, 0, msInterval); //return src.Task; return(true); }