예제 #1
0
        // ワーカー疑似スレッド
        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();
                        }
                    }
                }
            }
        }