dupcall

package
v0.0.0-...-50b27ac Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 3, 2023 License: MIT Imports: 1 Imported by: 0

README

dupcall

В этом задании нужно реализовать свою вариацию на тему singleflight. Использовать в реализации singleflight нельзя.

Объект dupcall.Call должен дедуплицировать вызовы дорогой функции, правильно обрабатывая отмену контекста.

Клиенты вызывают метод Do из разных горутин, передавая внутрь cb который они хотят запустить. cb запускается в отдельной горутине и в отдельном контексте.

В один момент времени должен быть запущен только один не отменённый cb. Клиент вызвавший Do должен получить результатом пару result interface{}, err error от того cb, который был запущен в момент вызова Do (но не обязательно от своего cb).

При этом вызов Do может быть отменён через ctx. Отменённый вызов Do должен завершаться сразу. Бегущий внутри cb должен отменяться только в случае, если все ждущие вызовы Do были отменены.

Например, если две горутины сделали вызов Do, а потом первый вызов был отменён, cb должен добежать успешно и вторая горутина должна получить его результат.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Call

type Call struct {
}

func (*Call) Do

func (o *Call) Do(
	ctx context.Context,
	cb func(context.Context) (interface{}, error),
) (result interface{}, err error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL