μ νμ§λ₯Ό ν΄λ¦νλ©΄ λ²νΌλ€μ΄ μμ±λμ λκΈ°νλ€κ° μ νλ μμ΄λλ₯Ό λ°ννλ μλ¬Έ
async UniTask<string> μ νμ§λΉλκΈ°(string[] μ νμ§μμ΄λλ€)
{
try
{
return await μ νμ§μμ΄λλ€.Select(μμ΄λ=>Β
{
λ²νΌ = λ²νΌμμ±(λ²νΌνμν μ€νΈ: μμ΄λ);
return λ²νΌ.Onclick().AsObserable().Select(_=> μμ΄λ); // λ²νΌμ΄ ν΄λ¦λλ©΄ μμ΄λλ₯Ό λ°νν¨
}).Merge() // λ²νΌλ€μ΄ μμ΄λλ₯Ό λ°ννλκ±Έ ν©μΉ¨
.FirstAsync(); // λ²νΌμ€ μ΄λκ±° νλλΌλ μμ΄λλ₯Ό λ°ννλ©΄ λ°νκ° λ¦¬ν΄νλ λμμ μλ ꡬλ ν΄μ
}
finally
{
λ²νΌλ€μ κ±°(); // λ·μ 리κΉμ§ νκ³ λ°ν
}
}
IDEλ‘ μμ±νκ² μλλΌμ μ¬μν κ΄νΈμ¬λ«κΈ°λ λ¬Έλ² μ°λΉ λ μμ μ μμΌλ AIμκ² λ¬Όμ΄λ³΄λ©΄ μ‘μμ€ κ²
μ§κΈ 보λκΉ unitaskλ§ μΈ λλ utcsλ‘ λ무 λΉ λμκ°κΈ΄ νμλ보λ€. γ³γ³
async UniTask μ νμ§λΉλκΈ°(string[] μ νμ§μμ΄λλ€, CancellationToken ct) { var λ²νΌλ€ = μ νμ§μμ΄λλ€ .Select(μμ΄λ => λ²νΌμμ±(λ²νΌνμν μ€νΈ: μμ΄λ)) .ToArray();
try { return await λ²νΌλ€ .Select((λ²νΌ, i) => λ²νΌ.OnClickAsObservable() .Select(_ => μ νμ§μμ΄λλ€[i])) // ν΄λ¦λλ©΄ μκΈ° μμ΄λλ₯Ό νλ¦Ό .Merge() // λ²νΌλ³ μ€νΈλ¦Όμ νλλ‘ .FirstAsync(ct); // λ¨Όμ νλ¬μ¨ μμ΄λλ₯Ό λ°ν } finally { λ²νΌλ€μ κ±°(); }}
νΉμ λμ€μ μ½μμ¬λμ© λ³Έλ¬Έ μ°λΉ κ΅μ λ³Έ
μ€μν λ²νΌμλ OnClickAsObservable λ€μ ThrottleκΉμ§ κ±Έμ΄μ μ€λ³΅ν΄λ¦ λ§λκ²λ λ³Έμ μμ