මෙය පැරණි ප්රශ්නයක් බව මම දනිමි, නමුත් අස්වැන්න යතුරු පදය නිර්මාණාත්මකව භාවිතා කළ හැකි ආකාරය පිළිබඳ එක් උදාහරණයක් ඉදිරිපත් කිරීමට මම කැමැත්තෙමි. මම මෙම තාක්ෂණයෙන් සැබවින්ම ප්රයෝජන ලබා ඇත්තෙමි . මෙම ප්රශ්නයට බාධා කරන වෙනත් ඕනෑම කෙනෙකුට මෙය උපකාරයක් වනු ඇතැයි අපේක්ෂා කරමු.
සටහන: අස්වැන්න යතුරු පදය හුදෙක් එකතුවක් තැනීමේ තවත් ක්රමයක් ලෙස නොසිතන්න. අස්වැන්න බලයේ විශාල කොටසක් පැමිණෙන්නේ ඇමතුම් කේතය ඊළඟ අගයට වඩා පුනරාවර්තනය වන තෙක් ඔබේ ක්රමවේදය හෝ දේපල ක්රියාත්මක කිරීම නවතා දමා ඇති බැවිනි. මෙන්න මගේ උදාහරණය:
අස්වැන්න යතුර භාවිතා කිරීම (රොබ් අයිසන්බර්ග්ගේ කැලිබර්න් සමඟ. මයික්රෝ කෝරෝටයින් ක්රියාත්මක කිරීම සමඟ) මට මෙවැනි වෙබ් සේවාවක් සඳහා අසමමුහුර්ත ඇමතුමක් ප්රකාශ කිරීමට ඉඩ දෙයි:
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();
}
මෙය කරන්නේ මගේ කාර්යබහුල ඉන්ඩිකේටරය සක්රිය කිරීම, මගේ වෙබ් සේවාවේ පිවිසුම් ක්රමය අමතන්න, මගේ IsLoggedIn ධජය ප්රතිලාභ අගයට සකසා, පසුව කාර්යබහුල දර්ශකය ආපසු හරවන්න.
මෙය ක්රියාත්මක වන ආකාරය මෙන්න: IResult සතුව ක්රියාත්මක කිරීමේ ක්රමයක් සහ සම්පූර්ණ සිදුවීමක් ඇත. කැලිබර්න්.මයික්රෝ හෑන්ඩ්ල්බටන් ක්ලික් () වෙත කළ ඇමතුමෙන් අයිඑන්එමුරේටරය අල්ලාගෙන එය කෝරෝටයින්.බෙජින්එක්ස්කියුට් ක්රමයට යොමු කරයි. BeginExecute ක්රමය IResults හරහා නැවත ආරම්භ කිරීම ආරම්භ කරයි. පළමු IResult ආපසු ලබා දුන් විට, HandleButtonClick () තුළ ක්රියාත්මක කිරීම විරාමයක් ලබා දෙන අතර BeginExecute () සම්පූර්ණ කළ සිදුවීමට සිදුවීම් හසුරුවන්නෙකු සම්බන්ධ කර ක්රියාත්මක කරන්න () අමතන්න. IResult.Execute () හට සමමුහුර්ත හෝ අසමමුහුර්ත කාර්යයක් කළ හැකි අතර එය අවසන් වූ විට එය අවසන් වේ.
LoginResult මේ වගේ දෙයක් පෙනේ:
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>
. එය කෙසේ හෝ කම්මැලි