Bazı verileri Dapper kullanarak SQL Server'a yazmak için yazdım. Diğer çalışmalara devam etmeden önce bu yazının tamamlanmasını beklemek zorunda değilim, bu nedenle bu zaman uyumsuz hale getirmek için Task.Run() öğesini kullanmak istiyorum. I (kullanarak) varC#, Dapper, SQL Server ve Bağlantı Havuzları
sistemimin geri kalanında bu çağırmak için ifadeleri:
using (IDataAccess ida = new DAL())
{
ida.WriteMessageToDB(id, routingKey, msgBody);
}
otomatik using ifadesi koştu olduğunda dbConnection.State kontrol edin ve eğer basit bir düzeltme dener Benim DAL kapalı. Bu, herhangi bir uyumsuz/TPL seçim çağrıları için iyi çalışır.
Ancak, aynı anda bir yazım yükü attığımda, Task.Run() kodu, bazıları için bağlantı kapatılmış olarak düşüyordu - aslında kodun paralel doğasının devlet anlamına geldiğini düşünüyorum diğer görevler tarafından kapatılıyordu.
Bunu Connection.tate dosyasını Task.Run() kodunda açmak için bir kontrol yaparak 'düzelttim' ve bu sorunun 'çözülmüş' gibi görünüyor. böylece gibi: Bundan sonra SSMS gelen SELECT * FROM sys.dm_exec_connections
çalıştırdığınızda
Task.Run(() =>
{
if (dbConnection.State == ConnectionState.Closed)
{
dbConnection.Open();
}
if (dbConnection.State == ConnectionState.Open)
{
*Dapper SQL String and Execute Commands*
}
});
, çok daha fazla bağlantı görmek. Beklenecek mi?
Şimdi anladığım kadarıyla:
- Zarif otomatik bağlantı havuzu ile mücadele etmesi
- SQL Server havuzlaması bağlantısı ile uğraşmaz?
Bu çözümde bir sorun var mı? Ya da bunu yapmanın daha iyi bir yolu? Bağlantı havuzlarını bariz nedenlerle ve mümkün olduğunca acısız olarak kullanmak isterim.
Şimdiden teşekkürler.
İlk olarak, Dapper açık değilse bağlantıyı açar. İkincisi, Dapper sadece bağlantı havuzundan bağlantıları kullanacak olan ADO.Net'i kullanıyor. Son olarak Dapper, 'Task.Run' yerine kullanabileceğiniz uyumsuz yöntemlere sahiptir. – juharr