2
我正在與合作伙伴一起開展xamarin項目。 Xamarin允許在iOS或Android編碼中使用C#。下面是一些代碼同事寫道,我覺得基本上更好的辦法可以做一個例子:如何正確「等待」聽衆?替換hacky旋轉鎖解決方案
alert = new AlertDialog.Builder (Act);
alert.SetOnDismissListener(new OnDismissListener(() => {
blocked = false;
}));
alert.SetNegativeButton (noOption, (senderAlert, args) => {
affirmative = false;
alert.Dispose();
});
alert.SetPositiveButton (yesOption, (senderAlert, args) => {
affirmative = true;
alert.Dispose();
});
//display the alert
//call GetAffirmative()
...
...
...
private async Task<bool> GetAffirmative()
{
int secondsToDelay = 1;
await Task.Delay(TimeSpan.FromSeconds(secondsToDelay));
if (!blocked) {
return affirmative;
}
return await GetAffirmative();
}
本質上,它創建一個作用於兩個布爾警告:肯定的布爾值被設置是/否響應,並且阻塞的布爾值用於旋轉鎖定。當自旋鎖由於'阻塞'布爾值被設置爲false而解析時,它從await中返回。
我真的不喜歡這個解決方案。什麼是更好的選擇? (最好是一個新的範例,而不是簡單地從遞歸變爲循環等)
'return await GetAffirmative();'這是遞歸的!最好使用'while(true)'循環。 – usr