После использования WhenAll
вы можете вывести результаты по отдельности с помощью await
:
var catTask = FeedCat();
var houseTask = SellHouse();
var carTask = BuyCar();
await Task.WhenAll(catTask, houseTask, carTask);
var cat = await catTask;
var house = await houseTask;
var car = await carTask;
Вы также можете использовать Task.Result
(поскольку вы знаете, что к этому моменту все они завершены успешно). Однако я рекомендую использовать await
, потому что это явно правильно, в то время как Result
может вызвать проблемы в других сценариях.
Учитывая следующий класс Foo
domain
class Foo {
String foo
String bar
String baz
static constraints = {
foo size: 4..7
bar size: 4..7
baz size: 4..7
}
}
Валидация для baz
может быть исключена следующим образом:
Foo foo = new Foo(foo: "fool", bar: "bars", baz: "baz")
//Gather all fields
def allFields = foo.class.declaredFields
.collectMany{!it.synthetic ? [it.name] : []}
//Gather excluded fields
def excludedFields = ['baz'] //Add other fields if necessary
//All but excluded fields
def allButExcluded = allFields - excludedFields
assert foo.validate(allButExcluded)
assert foo.save(validate: false) //without validate: false, validation kicks in
assert !foo.errors.allErrors
Нет прямого способа отправить список исключенных полей для проверки.
Вы можете определить настроенные карты ограничений , которые затем можно эффективно фильтровать из поддерживающих классов команд или Config.groovy
через параметр exclude
.
allFields
из вашего ответа (хотяtransients
есть, но, вероятно, включает все переходные поля). – ubiquibacon 23 August 2013 в 22:13allFields
, а именноconstraints
,instanceControllersDomainBindingApi
,$defaultDatabindingWhiteList
,instanceDatabindingApi
,errors
,id
,version
,log
иinstanceConvertersApi
. Я не понимаю, почему все эти записи существуют, и почему записьtransients
была заменена фактическими переходными полями. – ubiquibacon 23 August 2013 в 22:18