添加Result类型

修改请求处理接口
This commit is contained in:
walker 2023-10-12 14:04:23 +08:00
parent 74c0211614
commit 37e06d2aaf
2 changed files with 31 additions and 8 deletions

View File

@ -25,11 +25,11 @@ func main() {
}
// 请求功能测试
future := ecs.Request[int](sim, func() int {
resultFuture := ecs.Request[int](sim, func() ecs.Result[int] {
fmt.Println("执行请求")
return 20
return ecs.NewOkResult[int](20)
})
result := <-future
result := <-resultFuture
fmt.Println("执行结果:", result)
time.Sleep(2 * time.Second)

View File

@ -1,13 +1,36 @@
package ecs
// 结果
type Result[T any] struct {
Val T
Err error
}
type EmptyType struct{}
// 新建一个OK空结果
func NewOkEmptyResult() Result[EmptyType] {
return Result[EmptyType]{Val: struct{}{}, Err: nil}
}
// 新建一个OK结果
func NewOkResult[T any](val T) Result[T] {
return Result[T]{Val: val, Err: nil}
}
// 新建一个错误结果
func NewErrResult(err error) Result[EmptyType] {
return Result[EmptyType]{Val: struct{}{}, Err: err}
}
// 请求世界执行给定函数
func Request[T any](w World, fn func() T) chan T {
future := make(chan T)
func Request[T any](w World, handler func() Result[T]) chan Result[T] {
future := make(chan Result[T])
w.Execute(func() {
r := fn()
result := handler()
select {
// 及时外面不接收也不会卡停World运行
case future <- r:
// 即使外面不接收也不会卡停World运行
case future <- result:
default:
}
})