Пример #1
0
        public ElaAsync RunAsync(ElaFunction fun)
        {
            var ret = new ElaAsync(this, fun);

            ret.Run();
            return(ret);
        }
Пример #2
0
        public ElaValue GetValue(ElaAsync obj)
        {
            if (HasValue(obj))
                return obj.Return;
            else
            {
                Wait(Int32.MaxValue, obj);

                if (!HasValue(obj))
                    throw new ElaRuntimeException("AsyncNoValue", "Unable to obtain a value of an async computation.");

                return obj.Return;
            }
        }
Пример #3
0
        public ElaUnit Wait(int timeout, ElaAsync obj)
        {
            var th = obj.Thread;

            if (th != null)
            {
                if (th.Join(timeout))
                {
                    lock (syncRoot)
                    {
                        Threads.Remove(th);
                        obj.Thread = null;
                    }
                }
            }

            return(ElaUnit.Instance);
        }
Пример #4
0
        public ElaValue GetValue(ElaAsync obj)
        {
            if (HasValue(obj))
            {
                return(obj.Return);
            }
            else
            {
                Wait(Int32.MaxValue, obj);

                if (!HasValue(obj))
                {
                    throw new ElaRuntimeException("AsyncNoValue", "Unable to obtain a value of an async computation.");
                }

                return(obj.Return);
            }
        }
Пример #5
0
 public bool HasValue(ElaAsync obj)
 {
     lock (obj.SyncRoot)
         return(obj.Return.As <ElaObject>() != null);
 }
Пример #6
0
 public ElaAsync RunAsync(ElaFunction fun)
 {
     var ret = new ElaAsync(this, fun);
     ret.Run();
     return ret;
 }
Пример #7
0
 public bool HasValue(ElaAsync obj)
 {
     lock (obj.SyncRoot)
         return obj.Return.As<ElaObject>() != null;
 }
Пример #8
0
        public ElaUnit Wait(int timeout, ElaAsync obj)
        {
            var th = obj.Thread;

            if (th != null)
            {
                if (th.Join(timeout))
                {
                    lock (syncRoot)
                    {
                        Threads.Remove(th);
                        obj.Thread = null;
                    }
                }
            }

            return ElaUnit.Instance;
        }