2 rameel: Disposable.Create, порядок аргументов
От: Sinix  
Дата: 30.09.17 15:36
Оценка:
public static IDisposable Create<T>([NotNull] Action<T> disposeAction, T state)

Порядок аргументов лучше свапнуть и state в source | arg переименовать.

UPD и State после диспоза очищать. Иначе утечка будет.
Отредактировано 30.09.2017 20:12 Sinix . Предыдущая версия .
Re: 2 rameel: Disposable.Create, порядок аргументов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 30.09.17 19:24
Оценка:
Здравствуйте, Sinix, Вы писали:


S>
S>public static IDisposable Create<T>([NotNull] Action<T> disposeAction, T state)
S>

S>Порядок аргументов лучше свапнуть и state в source | arg переименовать.

А почему вообще не Action disposeAction? Зачем T?
Re[2]: 2 rameel: Disposable.Create, порядок аргументов
От: Sinix  
Дата: 30.09.17 19:39
Оценка:
Здравствуйте, samius, Вы писали:

S>А почему вообще не Action disposeAction? Зачем T?


Перегрузка без параметра тоже есть. Как я понял, новая перегрузка — это сахар для
using(Disposable.Create(someResource, r => r.Close())) {...}


По аналогии с factory-методами для тасков (из события и тыды).
Re[3]: 2 rameel: Disposable.Create, порядок аргументов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 30.09.17 20:06
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, samius, Вы писали:


S>>А почему вообще не Action disposeAction? Зачем T?


S>Перегрузка без параметра тоже есть. Как я понял, новая перегрузка — это сахар для

S>
S>using(Disposable.Create(someResource, r => r.Close())) {...}
S>


S>По аналогии с factory-методами для тасков (из события и тыды).


Я понимаю, для чего. Я не понимаю, почему не
using(Disposable.Create(() => someResource.Close())) {...}

Иными словами, какой смысл делать перегрузку с параметрами? Что такого можно записать с параметрами, чего нельзя записать без них и короче?
Re[4]: 2 rameel: Disposable.Create, порядок аргументов
От: Sinix  
Дата: 30.09.17 20:09
Оценка:
Здравствуйте, samius, Вы писали:

No idea why. Но раз добавлено — то хотя бы сделать это стильно
Re[2]: 2 rameel: Disposable.Create, порядок аргументов
От: rameel https://github.com/rsdn/CodeJam
Дата: 30.09.17 21:30
Оценка: 62 (2)
Здравствуйте, samius, Вы писали:

S>А почему вообще не Action disposeAction? Зачем T?


Для того, чтобы избежать создания замыкания там и когда это необходимо.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Re: 2 rameel: Disposable.Create, порядок аргументов
От: rameel https://github.com/rsdn/CodeJam
Дата: 30.09.17 21:53
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>Порядок аргументов лучше свапнуть и state в source | arg переименовать.


Порядок аргументов и название state взято на примерах от майкрософта. У них везде action идет первым, а аргумент, передаваемый в делегат — после. Сделал также, что соблюдался общий стиль. Вот примеры :

https://msdn.microsoft.com/en-us/library/dd321663
// CancellationToken class:
public CancellationTokenRegistration Register(
    Action<object> callback,
    object state)

https://msdn.microsoft.com/en-us/library/dd321456
// TaskFactory class:
public Task StartNew(
    Action<object> action,
    object state)

https://msdn.microsoft.com/en-us/library/dd321266(v=vs.110).aspx
// TaskFactory<TResult> class:
public Task<TResult> StartNew(
    Func<object, TResult> function,
    object state)


Ну и сами классы тасков, конструкторы и прочие методы такие как ContinueWith все сделаны единообразно, и соответственно, я свое ничего придумывать не стал и отступать от общего стиля тоже не стал, да и название для аргумента назвал так как используется — state.

S>UPD и State после диспоза очищать. Иначе утечка будет.


Да, не доглядел
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Re[3]: 2 rameel: Disposable.Create, порядок аргументов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 01.10.17 04:24
Оценка: +1
Здравствуйте, rameel, Вы писали:

R>Здравствуйте, samius, Вы писали:


S>>А почему вообще не Action disposeAction? Зачем T?


R>Для того, чтобы избежать создания замыкания там и когда это необходимо.


Благодярю! Не подумал об этом.
Может быть актуально в борьбе с implicitly captured closure.
Re[2]: 2 rameel: Disposable.Create, порядок аргументов
От: Sinix  
Дата: 01.10.17 05:21
Оценка: +1
Здравствуйте, rameel, Вы писали:

S>>Порядок аргументов лучше свапнуть и state в source | arg переименовать.


R>Порядок аргументов и название state взято на примерах от майкрософта. У них везде action идет первым, а аргумент, передаваемый в делегат — после.

Аргумент, причём убойный
Даже в Task.FromAsync() callback первыми идут, память подвела. И менять порядок аргументов при перегрузках тоже не рекомендуется.
Тогда оставляем как есть.

S>>UPD и State после диспоза очищать. Иначе утечка будет.

R>Да, не доглядел
Ок и спс
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.