// ワーカー疑似スレッド async Task WorkerTaskAsync(CancellationToken cancel = default) { while (true) { cancel.ThrowIfCancellationRequested(); // キューから 1 つ取ります if (Queue.TryDequeue(out SslCertCollectorItem? e) == false) { // もう ありません return; } e._MarkNotNull(); foreach (int port in Consts.Ports.PotentialHttpsPorts) { for (int i = 0; i < 3; i++) { // 処理を いたします // 3 回トライする try { SslCertCollectorItem e2 = e._CloneDeep(); e2.Port = port; await PerformOneAsync(e2, cancel); break; } catch (Exception ex) { $"Error: {e.SniHostName}:{port} => {ex.Message}"._Print(); } } } } }