열거 형을 반환하는 공용 함수가 하나 뿐인 라이브러리를 만들려고합니다. 내 요구 사항에 따라이 기능을 수행하는 개인 기능은 Android 플랫폼으로 인해 비동기 적이어야합니다. 내가하고 싶은 것은, 유일한 비공개 함수를 비동기 함수로서 소비하는 것입니다. 이것이 반 직관적이라고 생각할지 모르지만, 나는 이유가 있습니다. 함수 소비자는 이전에 동기 코드로 항상 코드를 실행해야 했으므로보다 효율적인 라이브러리로 래핑되었으므로이 요구 사항은 변경되지 않습니다. 나는 그들이 방법을 기다리고있는 것을 원하지 않는다. 그들은 알 필요가 없으며, 그것은 그 뒤에서 일어나는 일입니다. 여기 숨겨진 비동기 함수
내가 지금까지 무엇을 가지고,하지만 난 대중 방법을 고민하고 있습니다 : 요약public enum DialogResult
{
Button1 = 1,
Button2 = 2,
Button3 = 3,
}
class MsgBox
{
public DialogResult Show(String Title, String Caption, Context context)
{
}
private async Task<DialogResult> ShowAsync(String Title, String Caption, Context context)
{
return await BuildAsync(Title, Caption, context);
}
private Task<DialogResult> BuildAsync(String Title, String Caption,Context context)
{
var r = new TaskCompletionSource<DialogResult>();
new AlertDialog.Builder(context)
.SetPositiveButton("Yes", (sender, args) =>
{
// User pressed yes
r.SetResult(DialogResult.Button1);
})
.SetNegativeButton("No", (sender, args) =>
{
// Do nothing
r.SetResult(DialogResult.Button2);
})
.SetMessage(Caption)
.SetTitle(Title)
.Show();
return r.Task;
}
}
; 이 공용 함수가 ShowAsync에서 반환 된 후 DialogResult를 반환하기 만하면되며, 기다리지 않고 호출 할 필요가 없습니다.
'ShowAsync (...)와 유사합니다. 결과'? – DavidG
DavidG에게 감사 드려요.하지만이 방법을 사용해 보았는데 UI가 교착 상태에 빠졌습니다. – user3280560
'ConfigureAwait'는 어떻습니까? – DavidG