private async Task _Start() { var soc = default(Socket); var iep = default(IPEndPoint); for (var i = 0; i < _endpoints.Length; i++) { if (soc != null) { break; } soc = new Socket(SocketType.Stream, ProtocolType.Tcp); iep = _endpoints[i]; try { await soc.ConnectAsyncEx(iep).TimeoutAfter("Share receiver timeout."); } catch (Exception err) { Log.Error(err); soc.Dispose(); soc = null; } } if (soc == null) { Status = ShareStatus.失败; Dispose(); return; } var buf = LinksHelper.Generator.Encode(new { path = "share." + (_batch ? "directory" : "file"), data = _key, source = LinkModule.Id, target = Id, }); try { _ = soc.SetKeepAlive(); await soc.SendAsyncExt(buf); Status = ShareStatus.运行; await _Receive(soc, _cancel.Token); Status = ShareStatus.成功; PostModule.Notice(Id, _batch ? "share.dir" : "share.file", _origin); } catch (OperationCanceledException) { Status = ShareStatus.取消; } catch (Exception ex) { Log.Error(ex); Status = ShareStatus.中断; } finally { soc.Dispose(); Dispose(); } }