আমি জানি এটি একটি পুরানো প্রশ্ন, তবে আমি কীভাবে ফলন কীওয়ার্ডটি সৃজনশীলভাবে ব্যবহার করতে পারি তার একটি উদাহরণ দিতে চাই। আমি এই কৌশলটি থেকে সত্যিই উপকৃত হয়েছি । আশা করি এই প্রশ্নে হোঁচট খায় যে কারও পক্ষে এটি সহায়তা করবে।
দ্রষ্টব্য: ফলন কীওয়ার্ডটি কেবল সংগ্রহ তৈরির অন্য উপায় হিসাবে ভাবেন না। উত্পাদনের শক্তির একটি বড় অংশ আসে যে কলিং কোডটি পরবর্তী মানটির সাথে পুনরুক্ত না হওয়া অবধি কার্যকর পদ্ধতিটি আপনার পদ্ধতি বা সম্পত্তিতে বিরতি দেওয়া হয়েছিল। এখানে আমার উদাহরণ:
ফলন কীওয়ার্ডটি ব্যবহার করে (রব আইজেনবার্গের ক্যালিবার্ন। মাইক্রো কর্টিনেস প্রয়োগের সাথে) আমাকে একটি ওয়েব পরিষেবায় একটি অ্যাসিনক্রোনাস কলটি প্রকাশ করতে দেয়:
public IEnumerable<IResult> HandleButtonClick() {
yield return Show.Busy();
var loginCall = new LoginResult(wsClient, Username, Password);
yield return loginCall;
this.IsLoggedIn = loginCall.Success;
yield return Show.NotBusy();
}
এটি যা করবে তা হ'ল আমার ব্যস্টি ইন্ডিকেটরটি চালু করা, আমার ওয়েব পরিষেবায় লগইন পদ্ধতিটি কল করা, আমার ইসলগডইন পতাকাটি রিটার্ন মানটিতে সেট করা এবং তারপরে ব্যাসিআইন্ডিকেটরটি বন্ধ করে দেওয়া।
এটি কীভাবে কাজ করে তা এখানে: আইআরসাল্টের একটি এক্সিকিউট পদ্ধতি এবং একটি সম্পূর্ণ ইভেন্ট রয়েছে। ক্যালিবার্ন.মাইক্রো হ্যান্ডলবটনক্লিক () থেকে কলটি থেকে আইনিউমরেটরটিকে ধরে এবং এটি কর্টিন.বেগিনএক্সেকিউট পদ্ধতিতে পাস করে। বিগনিএক্সেক্ট পদ্ধতিটি আইআরএসল্টগুলির মাধ্যমে পুনরাবৃত্তি শুরু করে। যখন প্রথম আইআরসাল্ট ফিরে আসে, হ্যান্ডেল বাটনক্লিক () এর ভিতরে মৃত্যুদন্ড থামিয়ে দেওয়া হয়, এবং বিগনিএক্সেকিউট () একটি ইভেন্ট হ্যান্ডলার সংযুক্ত ইভেন্টের সাথে সংযুক্ত করে এবং এক্সিকিউট () কল করে। IResult.Execute () হয় একটি সিঙ্ক্রোনাস বা একটি অ্যাসিঙ্ক্রোনাস টাস্ক সম্পাদন করতে পারে এবং এটি সম্পন্ন হওয়ার পরে সম্পূর্ণ ইভেন্টটি ছড়িয়ে দেয়।
লগইনআরসাল্টকে এরকম কিছু দেখাচ্ছে:
public LoginResult : IResult {
// Constructor to set private members...
public void Execute(ActionExecutionContext context) {
wsClient.LoginCompleted += (sender, e) => {
this.Success = e.Result;
Completed(this, new ResultCompletionEventArgs());
};
wsClient.Login(username, password);
}
public event EventHandler<ResultCompletionEventArgs> Completed = delegate { };
public bool Success { get; private set; }
}
এটি এরকম কিছু সেট আপ করতে এবং যা চলছে তা দেখার জন্য নির্বাহের মধ্য দিয়ে পদক্ষেপ নিতে সহায়তা করতে পারে।
এই কেউ সাহায্য করে আউট আশা করি! ফলনটি বিভিন্নভাবে ব্যবহার করা যেতে পারে সেগুলি অন্বেষণ করতে আমি সত্যিই উপভোগ করেছি।
yield
বাঁধাIEnumerable<T>
এবং তার ধরণের। এটি কোনওভাবেই অলস মূল্যায়নে রয়েছে