I develop discrete-time optimization algorithms that tolerate asynchrony between agents. Rather than impose assumptions on the environment, I consider certain types of problems that allow for delays between updates and communications among agents. These problems are found in a wide range of settings including machine learning, AI, networks, communications, and robotics.