08/22/2014 20:56:24
By Felipe Pessoto
Publiquei uma nova versão do Fujiy Util.
Um detalhe que eu não tinha percebido até alguns dias, o que acontece com código assíncrono já que inicialmente ele não dispara uma Exception?
O problema não é especifico na biblioteca, mas em qualquer código que você use algum tipo de Cache onde faça o cache de uma Task, o que vai ser cada vez mais comum, ainda mais considerando que as chamadas que normalmente usam cache, são assíncronas.
O que acontece é que ao chamas o método a ser cacheado, ele retorna com sucesso uma Task, em Status pendente. Posteriormente ela será "awaited" e possivelmente ser cancelada ou falhar, mas nesse momentoa Task já estava no cache. Então agora antes de retornar qualquer item do tipo Task, verifico se não está com o Status Faulted ou Canceled.
https://www.nuget.org/packages/Fujiy.Util/
04/01/2014 11:02:35
By Felipe Pessoto
Publiquei no NuGet.org uma pequena biblioteca que uso há muito tempo para ajudar no uso de cache e evitar a mesma repetição de código sempre que se usa cache. Esta é a primeira versão pública.
O Package se chama Fujiy.Util e contém também algumas extensões para Collections.
Um exemplo de como essa biblioteca pode ajudar.
Em vez de escrever todo esse bloco de código:
decimal price;
var returnFromCache = Cache"CarClassGetPrice" + carId;
if(returnFromCache is decimal)
{
price = (decimal)returnFromCache;
}
else
{
price = GetPrice(carId);
Cache["CarClassGetPrice" + carId] = price;
}
Você escreve apenas:
decimal price = CacheHelper.FromCacheOrExecute(() => myObj.GetPrice(carId));
O código fonte está disponível no CodePlex e conta com muitos testes unitários