private void PostListenHandleToLoop(object tcsObj) { TaskCompletionSource <int> taskCompletionSource = (TaskCompletionSource <int>)tcsObj; if (string.IsNullOrEmpty(_name)) { taskCompletionSource.SetResult(0); return; } IntPtr intPtr = Marshal.AllocHGlobal(4); _bufferStruct = _libuv.CreateBufferStruct(intPtr, 4); _uvPipeHandle = new UvPipeHandle(); _uvPipeHandle.Init(_loopHandle, true); UvPipeStream uvPipeStream = new UvPipeStream(); uvPipeStream.Init(_loopHandle); //链接 uvPipeStream.PipeConnect(_uvPipeHandle, _name, new Action <UvPipeStream, int, Exception, object>(ConnectionCallBack), taskCompletionSource); }
private void ConnectionCallBack(UvPipeStream uvPipeStream, int num, Exception ex, object obj) { var taskCompletionSource = (TaskCompletionSource <int>)obj; uvPipeStream.Dispose(); if (ex != null) { taskCompletionSource.SetException(ex); return; } try { //当tcp 的 http 请求被重定向到这里的时候会回调 ReadCallback 方法 _uvPipeHandle.Read(AllocCallback, ReadCallback, null); taskCompletionSource.SetResult(0); } catch (Exception ex2) { Console.WriteLine(ex2); _uvPipeHandle.Dispose(); taskCompletionSource.SetException(ex2); } }