मैं एफई सहायक वर्ग कि परिवर्तन async सहेजता है:इकाई की रूपरेखा 6.1.0 SaveChangesAsync
public async Task<int> SaveOrUpdateAsync<TEntity>(TEntity entity)
where TEntity : class, IContextEntity
{
if (entity.Id == 0)
context.Set<TEntity>().Add(entity);
else
{
TEntity dbEntry = context.Set<TEntity>().Find(entity.Id);
if (dbEntry != null) dbEntry = entity;
}
return await context.SaveChangesAsync();
}
public void Save()
{
Task saveEntit1Async = repository.SaveOrUpdateAsync<Entity1>(entity1);
Task saveEntity2Async = repository.SaveOrUpdateAsync<Entity2>(entity2);
Task saveEntity3Async = repository.SaveOrUpdateAsync<Entity3>(Entity3);
Task.WaitAll(saveEntit1Async, saveEntity2Async, saveEntity3Async);
string test = "test";
)
फोन पर
Task.WaitAll(saveEntit1Async, saveEntity2Async, saveEntity3Async);
लाइन अटक जाती है और
string test = "test";
के लिए कभी नहीं हो जाता है लेकिन अगर मैं इसे चलाता हूं:
public void Save()
{
repository.SaveOrUpdateAsync<Entity1>(entity1);
repository.SaveOrUpdateAsync<Entity2>(entity2);
repository.SaveOrUpdateAsync<Entity3>(Entity3);
string test = "test";
)
यह ठीक काम करता है, सभी परिवर्तनों को सहेजा जा रहा है और इसे करने के लिए
string test = "test";
क्यों
Task.WaitAll(saveEntit1Async, saveEntity2Async, saveEntity3Async);
है आपरेशन जम जाता हो जाता है और कोड की अगली पंक्ति में कॉल गुजरता है कभी नहीं (स्ट्रिंग परीक्षण = "परीक्षण";)?
बिना कार्य। प्रतीक्षा करें, सिस्टम निष्पादन के वर्तमान धागे को अवरुद्ध नहीं करता है और अगली पंक्ति निष्पादित हो जाती है, कार्य के साथ। प्रतीक्षा करें, वर्तमान थ्रेड तब तक इंतजार करेगा जब तक कि सभी परिचालन नहीं किए जाते हैं, फिर स्ट्रिंग टेस्ट = 'टेस्ट'; – Sherlock
निष्पादित हो जाता है! लेकिन क्यों प्रतीक्षा हमेशा प्रतीक्षा करें पर! और दूसरी पंक्ति में कभी नहीं मिलता है? –
आपके पास इस कार्य में अपवाद हो सकता है, जो कभी भी वापस नहीं आ सकता है, इसलिए यह हमेशा के लिए प्रतीक्षा करेगा – Sherlock