다른 결과와 오류를 반환하는 두 가지 기능을 비동기 적으로 실행하는 방법을 찾고 있습니다. 두 가지 결과가 모두 완료 될 때까지 기다렸다가 인쇄 할 때까지 기다립니다. 또한 함수 중 하나가 오류를 반환하면 다른 함수를 기다리지 않고 오류를 인쇄하기 만하면됩니다. 예를 들어,이 기능을 가지고 :여러 goroutines의 결과 기다리기
여기func methodInt(error bool) (int, error) {
<-time.NewTimer(time.Millisecond * 100).C
if error {
return 0, errors.New("Some error")
} else {
return 1, nil
}
}
func methodString(error bool) (string, error) {
<-time.NewTimer(time.Millisecond * 120).C
if error {
return "", errors.New("Some error")
} else {
return "Some result", nil
}
}
https://play.golang.org/p/-8StYapmlg 내가 그것을 구현하는 방법이지만, 내 생각은 너무 많은 코드가 있습니다. 인터페이스 {}를 사용하여 단순화 할 수 있지만이 방법을 사용하고 싶지는 않습니다. 예를 들어 async/await를 사용하여 C#으로 구현할 수있는 간단한 것을 원합니다. 아마도 이러한 작업을 단순화하는 라이브러리가있을 것입니다.
업데이트 : 감사합니다. 내가 얼마나 빨리 도움을 받았는지는 정말 멋지다! 나는 WaitGroup의 사용법을 좋아한다. 분명히 코드를 변경에보다 강력하게 만들었으므로 마지막에 정확한 메서드 수를 변경하지 않고도 다른 비동기 메서드를 쉽게 추가 할 수 있습니다. 그러나 C#에서와 비교할 때 여전히 많은 코드가 있습니다. 내가 알기로 명시 적으로 메소드를 비동기로 표시 할 필요가 없으므로 실제로 태스크를 리턴 할 수 있습니다. 그러나 메소드 호출은 훨씬 간단합니다. 예를 들어,이 링크를 고려하십시오. actually catching exception is also needed 그런데, 저는 이것을 태스크에서 발견했습니다 어쨌든 json에 마샬링 될 것이기 때문에 실제로 비동기로 실행하려는 함수의 반환 유형을 알 필요가 없습니다. 이제는 go-kit의 끝점 계층에서 여러 서비스를 호출합니다.
는 IF [닫기 여러 goroutine의 사용 가능한 복제 오류가 발생합니다] (https://stackoverflow.com/questions/45500836/close-multiple-goroutine-if-an-error-occurs-in-one-in-go/45502591#45502591). – icza