sql >> データベース >  >> RDS >> Sqlserver

スレッディングと SqlFileStream。別のトランザクションで開かれているため、プロセスは指定されたファイルにアクセスできません

    Parallel.ForEach にトランザクションが流れない 、手動で取引を行う必要があります。

    //Switched to a thread safe collection.
    var documents = new ConcurrentQueue<ExtractedContent>();
    using (var ts = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
    {
        var attachments = await dao.GetAttachmentsAsync();
        //Grab a reference to the current transaction.
        var transaction = Transaction.Current;
        Parallel.ForEach(attachments, a =>
        {
            //Spawn a dependant clone of the transaction
            using (var depTs = transaction.DependentClone(DependentCloneOption.RollbackIfNotComplete))
            {
                documents.Enqueue(a.ToDbDocument());
                depTs.Complete();
            }
        });
    
        ts.Complete();
    }
      

    私も List<ExtractedContent> から切り替えました ConcurrentQueue<ExtractedContent>.Add( の呼び出しが許可されていないため 同時に複数のスレッドからのリストに。




    1. JSONデータをMYSQLに挿入する最良の方法

    2. テーブルの作成エラー-OracleSQL

    3. PostgreSQLのキャッシングの概要

    4. oracle sqlの結合キーワードと内部結合キーワードの違いは何ですか?