c# - Async/await task issue -
i have code , want run in background, can not do. gui frozen until end. error? tried anyway, still do. have code works, not example: s thx!
private relaycommand _jugarcommand; public relaycommand jugarcommand { { return _jugarcommand ?? (_jugarcommand = new relaycommand(jugar, () => cantidaddesimulaciones != null && regex.ismatch(cantidaddesimulaciones, @"^\d+$"))); } } private async void jugar() { jugadas = await calcularjugadas(); ganoa += jugadas.count(x => x.quiengano == "jugador a"); ganob += jugadas.count(x => x.quiengano == "jugador b"); empate += jugadas.count(x => x.quiengano == "empate"); jugadasacumuladas += 1; } private task<observablecollection<jugada>> calcularjugadas() { return task.run( () => { var calcularjugadas = new observablecollection<jugada>(); var numeroaleatorio = new random(); (var iindex = 1; iindex <= convert.toint16(cantidaddesimulaciones); iindex++) { var randomnumbera = numeroaleatorio.nextdouble(); var randomnumberb = numeroaleatorio.nextdouble(); var queeligioa = queeligio(randomnumbera).tostring(); var queeligiob = queeligio(randomnumberb).tostring(); var nuevojuegada = new jugada { id = iindex, numeroaleatorioa = randomnumbera, numeroaleatoriob = randomnumberb, jugadora = new jugador { queeligio = queeligioa }, jugadorb = new jugador { queeligio = queeligiob }, quiengano = quiengano(queeligioa, queeligiob) }; calcularjugadas.add(nuevojuegada); } return calcularjugadas; } ); }
you not applying concept of async properly. change calcularjugadas async first.
also might want change task.run taskfactory.startnew better multithreading. (note startnew awaitable). function this:
private async task<observablecollection<jugada>> calcularjugadas() { return await taskfactory.startnew( () => { var calcularjugadas = new observablecollection<jugada>(); var numeroaleatorio = new random(); (var iindex = 1; iindex <= convert.toint16(cantidaddesimulaciones); iindex++) { var randomnumbera = numeroaleatorio.nextdouble(); var randomnumberb = numeroaleatorio.nextdouble(); var queeligioa = queeligio(randomnumbera).tostring(); var queeligiob = queeligio(randomnumberb).tostring(); var nuevojuegada = new jugada { id = iindex, numeroaleatorioa = randomnumbera, numeroaleatoriob = randomnumberb, jugadora = new jugador { queeligio = queeligioa }, jugadorb = new jugador { queeligio = queeligiob }, quiengano = quiengano(queeligioa, queeligiob) }; calcularjugadas.add(nuevojuegada); } return calcularjugadas; } ); }
Comments
Post a Comment