Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 독서
- javascript
- 빌드
- Effective C#
- Unity
- 자유여행
- 서평
- 이펙티브 C#
- 이펙티브 씨샵
- 알고리즘
- build
- 유니티
- HackerRank
- 프로그래밍
- 개발
- 프로그래밍도서
- IOS
- 해커랭크 문제풀이
- 문제풀이
- 독후감
- 해커랭크
- 방학여행
- 책리뷰
- 일본음식
- 코토리
- 책 정리
- C#
- 정렬
- 알고리즘 문제풀이
- Android
Archives
- Today
- Total
Console.Log
뒤끝 비동기 함수와 C# Promise 사용하기 본문
뒤끝에서 서버 API를 사용하는 방법
뒤끝에서 서버 API를 사용하는 방법은 총 3가지다.
- 동기호출
- 비동기호출
- SendQueue(비동기) 호출
난이도가 가장 쉽고 직관적인건 1번이지만 서버 값을 받아올 때까지 게임이 멈추기에 그렇게 좋은 방법은 아니다. 그렇다면 비동기호출을 해야하는데, 보낸 순서대로 순서를 보장 받을 수 있는 SendQueue방식의 호출을 게임을 개발하며 주로 사용했다.
Promise 패턴
Promise 패턴은 여러 비동기 함수들을 쉽게 관리할 수 있게 하는 패턴이다. Promise 객체는 처리에 대한 결과 상태를 반환하고, 작업의 종료시점을 알 수 있게 된다. Promise객체의 상태는 크게 3가지다.
- Pending - 작업이 완료되지 않은 상태.
- Resolved - 작업이 성공적으로 완료된 상태.
- Rejected - 작업 도중 에러가 나서 실패한 상태.
각 상태에 맞춰 작업을 처리하고, Promise끼리 연결을 통해 여러 비동기 작업들의 끝나는 시점들을 제어할 수 있다. 무엇보다 가장 큰 장점은 callback지옥 코드에서 벗어날 수 있고, 비동기들의 관리가 쉽다는 점이다.
뒤끝 비동기 호출(SendQueue) + Promise 패턴 사용
뒤끝에서 비동기를 호출하면서 Promise패턴을 사용하면 callback지옥에서 벗어날 수 있다. 비동기 호출이 완료될 때까지 promise상태를 pending으로 두었다가 정상적인 response를 받으면 resolve하게 한다. 뒤끝의 비동기 호출과 Promise를 사용하는 예제를 확인해보자.
// 로그인 서비스 예제
public class LoginService
{
public IPromise GuestLogin()
{
var promise = new Promise();
SendQueue.Enqueue(Backend.BMember.GuestLogin, "게스트 로그인", bro =>
{
if (bro.IsSuccess())
{
Debug.Log($"게스트 로그인 성공!");
promise.Resolve();
}
else
{
Debug.Log($"게스트 로그인 실패!");
promise.Reject(new Exception("게스트 로그인 실패"));
});
return promise;
}
}
public class Main
{
public LoginService loginService;
public void OnPressedGuestLoginButton()
{
// 게스트 로그인을 시도후 완료되면 Then 함수를 호출
loginService.GuestLogin().Then(() =>
{
// 로그인 완료 후 처리.
// 이곳에 또 Promise를 만들어 연결 할 수 있다.
});
}
}
'프로그래밍 > C#' 카테고리의 다른 글
[C#] 소수점 Parsing 할 때, (float.Parse, double.Parse) 언어에 따른 소수점 에러 (6) | 2021.10.19 |
---|