/// <summary> /// 获取HTML标题 /// </summary> /// <param name="uri">Uri与回调函数信息</param> /// <param name="isOnGet"></param> private void get(Uri uri, ref bool isOnGet) { HttpClient client = null; clientLock.EnterYield(); if (isDisposed == 0) { if (clientIndex == 0) { if (clientCount == clients.Length) { uris.Push(uri); clientLock.Exit(); isOnGet = true; return; } ++clientCount; clientLock.Exit(); try { client = new HttpClient(this); } catch (Exception error) { Log.Exception(error, null, LogLevel.Exception | LogLevel.AutoCSer); } if (client == null) { clientLock.EnterYield(); if (isDisposed == 0) { uris.Push(uri); --clientCount; clientLock.Exit(); isOnGet = true; return; } clientLock.Exit(); isOnGet = true; uri.Cancel(); return; } } else { client = clients[--clientIndex]; clientLock.Exit(); } isOnGet = client.Get(uri); } else { clientLock.Exit(); isOnGet = true; uri.Cancel(); } }
/// <summary> /// 获取HTML标题 /// </summary> /// <param name="uri">Uri与回调函数信息</param> /// <param name="isOnGet"></param> private void get(Uri uri, ref bool isOnGet) { HttpClient client = null; while (System.Threading.Interlocked.CompareExchange(ref clientLock, 1, 0) != 0) { AutoCSer.Threading.ThreadYield.Yield(AutoCSer.Threading.ThreadYield.Type.HtmlTitleHttpClient); } if (isDisposed == 0) { if (clientIndex == 0) { if (clientCount == clients.Length) { uris.Push(uri); clientLock = 0; isOnGet = true; return; } ++clientCount; clientLock = 0; try { client = new HttpClient(this); } catch (Exception error) { Log.add(AutoCSer.Log.LogType.Error, error); } if (client == null) { while (System.Threading.Interlocked.CompareExchange(ref clientLock, 1, 0) != 0) { AutoCSer.Threading.ThreadYield.Yield(AutoCSer.Threading.ThreadYield.Type.HtmlTitleHttpClient); } if (isDisposed == 0) { uris.Push(uri); --clientCount; clientLock = 0; isOnGet = true; return; } clientLock = 0; isOnGet = true; uri.Cancel(); return; } } else { client = clients[--clientIndex]; clientLock = 0; } isOnGet = client.Get(uri); } else { clientLock = 0; isOnGet = true; uri.Cancel(); } }