sql >> Databáze >  >> RDS >> Sqlserver

Threading a SqlFileStream. Proces nemá přístup k zadanému souboru, protože byl otevřen v jiné transakci

Transakce neprochází do Parallel.ForEach , musíte transakci zadat ručně.

//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();
}

Také jsem přešel z List<ExtractedContent> do ConcurrentQueue<ExtractedContent> protože nemáte povoleno volat .Add( na seznamu z více vláken současně.




  1. Jaký je nejrychlejší způsob hromadného vkládání velkého množství dat na SQL Server (klient C#)

  2. Jak předat příkazy podmínky do dotazu mySql

  3. zkopírujte všechny řádky tabulky do jiné tabulky

  4. asp classic, jak zachytit chyby při připojování k serveru propojenému s Oracle