पर विचार करें इस रिएक्टिव एक्सटेंशन झलकी (यह की व्यावहारिकता पर ध्यान न दें):थोड़ी देर लूप में ब्रेक जोड़ने से अधिभार अस्पष्टता कैसे हल हो जाती है?
return Observable.Create<string>(async observable =>
{
while (true)
{
}
});
यह (का उपयोग कर NuGet आरएक्स-मुख्य पैकेज) रिएक्टिव एक्सटेंशन 2.2.5 के साथ संकलन नहीं है। इसके साथ विफल रहता है:
Error 1 The call is ambiguous between the following methods or properties: 'System.Reactive.Linq.Observable.Create<string>(System.Func<System.IObserver<string>,System.Threading.Tasks.Task<System.Action>>)' and 'System.Reactive.Linq.Observable.Create<string>(System.Func<System.IObserver<string>,System.Threading.Tasks.Task>)'
हालांकि, जबकि पाश में कहीं भी एक break
जोड़ने संकलन त्रुटि को ठीक:
return Observable.Create<string>(async observable =>
{
while (true)
{
break;
}
});
समस्या सभी (आसान पर रिएक्टिव एक्सटेंशन के बिना reproduced किया जा सकता है अगर आप कोशिश करना चाहते हैं यह) आरएक्स साथ नगण्य बिना:
class Program
{
static void Main(string[] args)
{
Observable.Create<string>(async blah =>
{
while (true)
{
Console.WriteLine("foo.");
break; //Remove this and the compiler will break
}
});
}
}
public class Observable
{
public static IObservable<TResult> Create<TResult>(Func<IObserver<TResult>, Task> subscribeAsync)
{
throw new Exception("Impl not important.");
}
public static IObservable<TResult> Create<TResult>(Func<IObserver<TResult>, Task<Action>> subscribeAsync)
{
throw new Exception("Impl not important.");
}
}
public interface IObserver<T>
{
}
इसके बारे में रिएक्टिव एक्सटेंशन भाग की उपेक्षा कर, क्यों break
सी # संकलक संकल्प जोड़ने में सहायता करता है अस्पष्टता? सी # विनिर्देश से ओवरलोड रिज़ॉल्यूशन के नियमों के साथ इसका वर्णन कैसे किया जा सकता है?
मैं दृश्य स्टूडियो 2013 अद्यतन 2 को निशाना बनाने 4.5.1 का उपयोग कर रहा हूँ।
@ Mic1780: जब अनंत लूप का पता लगाने के दौरान संकलक विफल होते हैं? इससे पहले कभी नहीं देखा ... – knittl
@ Mic1780 कोई विचार नहीं कि आप किस बारे में बात कर रहे हैं। सी # कंपाइलर (असल में, अधिकांश कंपाइलर्स) खुशी से एक अनंत लूप संकलित करेंगे, यहां तक कि 'जबकि (सत्य) {} ' – tnw