Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Threading dan SqlFileStream. Proses tidak dapat mengakses file yang ditentukan karena telah dibuka di transaksi lain

Transaksi tidak mengalir ke Parallel.ForEach , Anda harus memasukkan transaksi secara manual.

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

Saya juga beralih dari List<ExtractedContent> ke ConcurrentQueue<ExtractedContent> karena Anda tidak diperbolehkan menelepon .Add( pada daftar dari beberapa utas secara bersamaan.




  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 Server - temukan kemunculan ke-n dalam sebuah string

  2. Bagaimana cara mengeluarkan DateTime yang dapat dibatalkan dari database

  3. Mengapa koneksi ODBC saya gagal saat menjalankan beban SSIS di Visual Studio tetapi tidak saat menjalankan paket yang sama menggunakan Execute Package Utility

  4. Jenis teks, nteks, dan data gambar> tidak dapat dibandingkan atau diurutkan, kecuali jika menggunakan operator IS NULL atau LIKE>

  5. Tidak dapat mengakses tabel sementara dari dalam suatu fungsi