Sqlserver
 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да използвам тип данни за дата в sql сървър?

  2. Методи за експортиране и импортиране на таблици на база данни на SQL Server

  3. Топ 10 често задавани въпроси относно мониторинга на производителността на SQL Server

  4. Как да създадете външен ключ в SQL Server (T-SQL примери)

  5. Преобразувайте VarBinary RTF blob в текст в MS SQL