39 lines
773 B
Go
39 lines
773 B
Go
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, handler func() Result[T]) chan Result[T] {
|
||
future := make(chan Result[T])
|
||
w.Execute(func() {
|
||
result := handler()
|
||
select {
|
||
// 即使外面不接收,也不会卡停World运行
|
||
case future <- result:
|
||
default:
|
||
}
|
||
})
|
||
return future
|
||
}
|