c# - UIKITThreadAccessException from await Task.Run with a try-catch-finally block -


i have method

public async task dosomething() 

inside method have code:

showspinner();        await system.threading.tasks.task.run(() => {     try     {         getvalue = value();     }     catch(exception ex)     {     }         {         hidespinner();     }     }); 

the showspinner() , hidespinner() overlays prevent user interacting screen , show spinning wheel indicate loading.

i getting error:

uikit consistency error: calling uikit method can invoked ui thread.

i know because of hidespinner(). how can around consistency error?

there 2 things can here, preferred method await task inside try block, , second less preferred method wrap hidespinner(); in runonuithread.

preferred

showspinner(); try {         var val = await task.run(() => "foo");     // little added performance,      // if val isn't being marshalled ui     // can use .configureawait(false);     // var val = await task.run(() => "foo").configureawait(false); } catch { /* gulp */} { hidespinner(); } 

less preferred

showspinner(); await task.run(() => {     try     {         var val = "value";     }     catch { /* gulp */ }         {         invokeonmainthread(() =>         {             hidespinner();         });      } }); 

Comments