उपयोग करने और प्रतीक्षा करने के बीच अंतर क्या है? और मैं कैसे तय कर सकता हूं कि किसका उपयोग करना है?


21

मैंने देखा है कि किसी मामले में, Visual Studio ऐसा करने की सलाह देता है

await using var disposable = new Disposable();
// Do something

इसके अलावा

using var disposable = new Disposable();
// Do something

बीच क्या अंतर है usingऔर await using?

मुझे कैसे तय करना चाहिए कि किसका उपयोग करना है?


3
ऐसा लगता है कि आप केवल await usingएक के साथ उपयोग IAsyncDisposableकर सकते हैं और आप केवल usingएक के साथ उपयोग कर सकते हैं IDisposableक्योंकि न तो दूसरे से विरासत में मिला है। आप या तो उपयोग कर सकते हैं केवल तभी जब ठोस वर्ग दोनों को लागू करता है और फिर यह निर्भर करता है कि आप अतुल्यकालिक कोड लिख रहे हैं या नहीं।
जुहार

जवाबों:


31

क्लासिक सिंक का उपयोग करना

क्लासिक इंटरफ़ेस को Dispose()लागू करने वाली किसी वस्तु की विधि का उपयोग करता IDisposableहै।

using var disposable = new Disposable();
// Do Something...

के बराबर है

IDisposable disposable = new Disposable();
try
{
    // Do Something...
}
finally
{
    disposable.Dispose();
}

नई async का उपयोग करने का इंतजार है

नया कॉल का उपयोग करने का इंतजार करता है और इंटरफ़ेस को DisposeAsync()लागू करने वाली किसी वस्तु की विधि का इंतजार करता IAsyncDisposableहै।

await using var disposable = new AsyncDisposable();
// Do Something...

के बराबर है

IAsyncDisposable disposable = new AsyncDisposable();
try
{
    // Do Something...
}
finally
{
    await disposable.DisposeAsync();
}

IAsyncDisposable इंटरफ़ेस में जोड़ा गया .NET Core 3.0और .NET Standard 2.1

.NET में, मानव रहित संसाधन रखने वाले वर्ग आमतौर पर अप्रबंधित संसाधनों को समकालिक रूप से जारी करने के लिए एक तंत्र प्रदान करने के लिए आईडीआईसोफ़ायर इंटरफ़ेस लागू करते हैं। हालांकि, कुछ मामलों में उन्हें सिंक्रोनस के अलावा (या इसके बजाय) अप्रबंधित संसाधनों को जारी करने के लिए एक अतुल्यकालिक तंत्र प्रदान करने की आवश्यकता होती है । ऐसे तंत्र को प्रदान करने से उपभोक्ता जीयूआई एप्लिकेशन के मुख्य धागे को लंबे समय तक अवरुद्ध किए बिना संसाधन-गहन निपटान संचालन करने में सक्षम होता है।

इस इंटरफ़ेस की IAsyncDisposable.DisposeAsync विधि एक ValueTask देता है जो एसिंक्रोनस डिस्पोज़ ऑपरेशन का प्रतिनिधित्व करता है। वे वर्ग जो स्वयं के अप्रबंधित संसाधन इस विधि को लागू करते हैं, और इन वर्गों के उपभोक्ता इस विधि को किसी वस्तु पर तब कॉल करते हैं जब इसकी आवश्यकता नहीं होती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.